MongoDB 具有唯一结果的聚合查找
MongoDB aggregation lookup with unique results
我有 3 个集合具有以下架构
当我执行以下查询时,我正在获取包含所有语音号码的合同详细信息。
我如何才能只选择不同的 voiceNumbers。
一天内尝试了多种方法,但没有达到所需的输出
db.getCollection("common").aggregate([
{
$match: {
"name.firstName": "Kevin",
},
},
{
$lookup: {
from: "user",
localField: "_id",
foreignField: "userId",
as: "userDetails",
},
},
{
$unwind: {
path: "$userDetails",
includeArrayIndex: "0",
preserveNullAndEmptyArrays: true,
},
},
{ $match: { "userDetails.userType": { $in: ["U"] } } },
{
$lookup: {
from: "contract",
localField: "userDetails.userNumber",
foreignField: "userNumber",
as: "contractDetails",
},
}
]);
以下是当前和预期结果
在 $unwind
下方添加 $group
在汇总的末尾
{
$unwind: "$contractDetails"
},
{
$group: {
"_id": "$contractDetails.voiceNumber",
"field": {
"$first": "$$ROOT"
}
}
},
{
$group: {
"_id": "$field._id",
"userDetails": {
"$first": "$field.userDetails"
},
"gender": {
"$first": "$field.gender"
},
"name": {
"$first": "$field.name"
},
"0": {
"$first": "$field.0"
},
"contractDetails": {
"$push": "$field.contractDetails"
}
}
}
db.common.aggregate([
{
$match: {
"name.firstName": "Kevin"
}
},
{
$lookup: {
from: "user",
localField: "_id",
foreignField: "userId",
as: "userDetails"
}
},
{
$unwind: {
path: "$userDetails",
includeArrayIndex: "0",
preserveNullAndEmptyArrays: true
}
},
{
$match: {
"userDetails.userType": {
$in: [
"U"
]
}
}
},
{
$lookup: {
from: "contract",
localField: "userDetails.userNumber",
foreignField: "userNumber",
as: "contractDetails"
}
},
{
$unwind: "$contractDetails"
},
{
$group: {
"_id": "$contractDetails.voiceNumber",
"field": {
"$first": "$$ROOT"
}
}
},
{
$group: {
"_id": "$field._id",
"userDetails": {
"$first": "$field.userDetails"
},
"gender": {
"$first": "$field.gender"
},
"name": {
"$first": "$field.name"
},
"0": {
"$first": "$field.0"
},
"contractDetails": {
"$push": "$field.contractDetails"
}
}
}
])
我有 3 个集合具有以下架构
当我执行以下查询时,我正在获取包含所有语音号码的合同详细信息。 我如何才能只选择不同的 voiceNumbers。 一天内尝试了多种方法,但没有达到所需的输出
db.getCollection("common").aggregate([
{
$match: {
"name.firstName": "Kevin",
},
},
{
$lookup: {
from: "user",
localField: "_id",
foreignField: "userId",
as: "userDetails",
},
},
{
$unwind: {
path: "$userDetails",
includeArrayIndex: "0",
preserveNullAndEmptyArrays: true,
},
},
{ $match: { "userDetails.userType": { $in: ["U"] } } },
{
$lookup: {
from: "contract",
localField: "userDetails.userNumber",
foreignField: "userNumber",
as: "contractDetails",
},
}
]);
以下是当前和预期结果
在 $unwind
下方添加 $group
在汇总的末尾
{
$unwind: "$contractDetails"
},
{
$group: {
"_id": "$contractDetails.voiceNumber",
"field": {
"$first": "$$ROOT"
}
}
},
{
$group: {
"_id": "$field._id",
"userDetails": {
"$first": "$field.userDetails"
},
"gender": {
"$first": "$field.gender"
},
"name": {
"$first": "$field.name"
},
"0": {
"$first": "$field.0"
},
"contractDetails": {
"$push": "$field.contractDetails"
}
}
}
db.common.aggregate([
{
$match: {
"name.firstName": "Kevin"
}
},
{
$lookup: {
from: "user",
localField: "_id",
foreignField: "userId",
as: "userDetails"
}
},
{
$unwind: {
path: "$userDetails",
includeArrayIndex: "0",
preserveNullAndEmptyArrays: true
}
},
{
$match: {
"userDetails.userType": {
$in: [
"U"
]
}
}
},
{
$lookup: {
from: "contract",
localField: "userDetails.userNumber",
foreignField: "userNumber",
as: "contractDetails"
}
},
{
$unwind: "$contractDetails"
},
{
$group: {
"_id": "$contractDetails.voiceNumber",
"field": {
"$first": "$$ROOT"
}
}
},
{
$group: {
"_id": "$field._id",
"userDetails": {
"$first": "$field.userDetails"
},
"gender": {
"$first": "$field.gender"
},
"name": {
"$first": "$field.name"
},
"0": {
"$first": "$field.0"
},
"contractDetails": {
"$push": "$field.contractDetails"
}
}
}
])