mongodb - 如何在 mongo 聚合中使用 map 内部查找来查找数组中的所有元素

标签 mongodb

假设我有两个系列

集合 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/

相关文章:

mongodb - 蒙哥错误: E11000 duplicate key error collection for unique compound index

Mongodb:kern.sched 不可用

python - Flask-pymongo 运行时错误 : Working outside of application context

mongodb - 是否可以在 mongodb 聚合函数中使用 "$where"

javascript - Mongo 会处理我的服务吗?

java - 如何防止 MongoDB 将集群更新日志打印到控制台?

java - MongoDB 的不可变自动生成存储库抛出 "Can' t 为接口(interface)“CodecConfigurationException 找到编解码器”

node.js - MongoDB 从文本搜索中排除精确匹配

mongodb - 索引顺序在 MongoDB 中重要吗?

MongoDB:获取 GridFS 中可用的存储桶列表?