如何组合多个集合并将已连接的文档合并到单个文档中

时间:2018-03-15 13:59:46

标签: mongodb mongodb-query aggregation-framework

这是问题,我无法得到以下结果。请看一下json并帮我解决。

这是我的数据:

[
  {
    "user_id": "65asdfksadjfk3u4",
    "lat": 23.4343,
    "long": 15.2382 
  }
]

目前我的结果是:

[
  {
    "_id": "65asdfksadjfk3u4",
    "name": "Srini",
    "age": 26,
    "some other key": "some other values"
  }
]

我需要从user_id获取集合并将其添加到同一个数组对象中。你可以注意到我的当前结果中都删除了lat和long。

[
  {
     "_id": "65asdfksadjfk3u4",
     "name": "Srini",
     "age": 26,
     "some other keys": "some other values",
     "lat": 23.4343,
     "long": 15.2382 
  }
]

1 个答案:

答案 0 :(得分:1)

您可以附加 $lookup 阶段,通过users字段将user_id集合加入当前管道结果,然后使用 {{ 3}} $mergeObjects 中合并来自users的加入文档和当前结果:

db.collection.aggregate([
    /* current pipeline here */
    { "$lookup": {
            "from": "users",
            "localField": "_id",
            "foreignField": "user_id",
            "as": "user"
    } },
    { "$replaceRoot": { 
        "newRoot": { 
            "$mergeObjects": [ 
                { "$arrayElemAt": [ "$user", 0 ] }, 
                "$$ROOT" 
             ] 
        } 
    } },
    { "$project": { "user": 0, "user_id": 0 } }    
]);