首页 > 解决方案 > 展开包含的 Mongo 文档

问题描述

这是给 MongoDB

我有一个文件说Employee如下:

{
  "_id":"e01",
  "name":"Andy",
  "salary":"10000",
  "address":"ad01id"
}

这是一个简单的员工文档,地址是文档的外键,Address如下所示(对于上面的员工)

{
   "_id": "ad01id",
   "pin":"999",
   "Home":{
           "street":"101",
           "city":"someCity"
          },
   "Country":"someCountry"
}

我需要帮助来编写一个查询,该查询将获取一个Employee但会给我一个输出,该输出的Employee'address字段将随着其整个文档扩展为

{
  "_id":"e01",
  "name":"Andy",
  "salary":"10000",
  "address":{
            "pin":"999",
            "Home":{
                    "street":"101",
                    "city":"someCity"
                   },
            "Country":"someCountry"
            }
}

我已经尝试$lookup$merge无法获得所需的输出 -$merge如果后面的文档具有相同的密钥,则隐藏早期文档中的密钥,这在我的真实场景中就是这种情况。我的实际文档有一些同名的键。例如name在我的两个实际文档中都有。

提前致谢!

标签: mongodbmongodb-query

解决方案


需要$lookup来“加入”来自两个集合的数据,并且$unwind$arrayElemAt可用于将作为结果的数组转换$lookup为嵌套子文档:

db.Employee.aggregate([
    {
        $lookup: {
            from: "Address",
            localField: "address",
            foreignField: "_id",
            as: "address"
        }
    },
    {
        $addFields: {
            address: { $arrayElemAt: [ "$address", 0 ] }
        }
    },
    {
        $project: {
            "address._id": 0
        }
    }
])

蒙戈游乐场


推荐阅读