让我说我有两个收藏夹
集合1是“个人”
{
"id":string
"name":string
"DOB":date
"occupation":string
}
集合2是“ connectionsWith”
{
"individualId":string
"type":"friends":string
"connectionIds":[]
}
使用的聚合查询是
db.individual.aggregate([
{
"$match":{
"_id":"bbin.ens3pvjeej0vg1bn3tcjr"
}
},
{
"$lookup":
{
"from": "connectionsWith",
"localField": "_id",
"foreignField": "individualId",
"as": "connections",
}
},
{
"$project":
{
"_id":1,
"name":1,
"connections":1
}
}
])
在这里,输出为我提供了ID数组中的连接,现在我想显示连接的名称而不是ID。我猜想使用map是解决方案,但不允许我对map中的名称使用查找。任何建议都会很有帮助。从几个小时开始就抓挠了
谢谢
答案 0 :(得分:0)
如果我理解正确,您想用连接的对象替换现有的根。为此,您无需在 $lookup
内执行 $map
。相反,您应该使用 $unwind
和 $replaceRoot
阶段。
由于 $lookup
将注入一个新的 connections
数组,您想要的是获得一个顶级对象数组,每个对象都有一个查找的连接。这就是$unwind
所做的。
之后,在每种情况下都可以用连接本身替换初始根。
虽然我只对它进行了部分测试,但您的完整解决方案可能看起来像这样。查看以下最后两个汇总阶段:
db.individual.aggregate([
{
"$match":{
"_id":"bbin.ens3pvjeej0vg1bn3tcjr"
}
},
{
"$lookup":
{
"from": "connectionsWith",
"localField": "_id",
"foreignField": "individualId",
"as": "connections",
}
},
{
"$project":
{
"_id":1,
"name":1,
"connections":1
}
},
{
"$unwind": "$connections"
},
{
"$replaceRoot":
{
"newRoot": "$connections"
}
}
])