假设我有两个系列
集合 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 中使用查找名称。任何建议都会非常有帮助。几个小时以来一直在研究这个
谢谢
最佳答案
如果我理解正确,您想用连接的对象替换现有的根。为此,您无需执行 $lookup
$map
的内部.相反,您应该使用 $unwind
和 $replaceRoot
阶段。
由于$lookup
将注入(inject)一个新的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"
}
}
])
关于mongodb - 如何在 mongo 聚合中使用 map 内部查找来查找数组中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51227419/