Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 展开包含的Mongo文档_Mongodb_Mongodb Query - Fatal编程技术网

Mongodb 展开包含的Mongo文档

Mongodb 展开包含的Mongo文档,mongodb,mongodb-query,Mongodb,Mongodb Query,这是给MongoDB的 我有一份文件,上面写着Employee,如下所示: { "_id":"e01", "name":"Andy", "salary":"10000", "address":"ad01id" } 这是一个简单的员工文档,地址是address文档的外键,如下所示(针对上述员工) 我需要一个帮助来编写一个查询,该查询将获取员工,但会给我一个输出,该输出将员工的地址字段展开,其整个文档如下所示 { "_id":"e01", "name":"Andy",

这是给MongoDB的

我有一份文件,上面写着
Employee
,如下所示:

{
  "_id":"e01",
  "name":"Andy",
  "salary":"10000",
  "address":"ad01id"
}
这是一个简单的员工文档,地址是
address
文档的外键,如下所示(针对上述员工)

我需要一个帮助来编写一个查询,该查询将获取
员工
,但会给我一个输出,该输出将
员工
地址
字段展开,其整个文档如下所示

{
  "_id":"e01",
  "name":"Andy",
  "salary":"10000",
  "address":{
            "pin":"999",
            "Home":{
                    "street":"101",
                    "city":"someCity"
                   },
            "Country":"someCountry"
            }
}
我尝试了
$lookup
$merge
,但无法获得所需的输出-
$merge
如果后面的文档具有相同的键,则隐藏早期文档中的键,这在我的真实场景中是如此。我的实际文档有一些同名的键。例如
name
在我的两个实际文档中都有

提前谢谢

用于“连接”两个集合中的数据,或用于将作为
$lookup
结果的数组转换为嵌套子文档:

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

需要“连接”两个集合中的数据,或可用于将作为
$lookup
结果的数组转换为嵌套子文档:

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

您也可以使用“填充”

db.Employee.find(
  {
  },
)
  .populate("address", "pin Home Country")
  .exec(function(err, result) {
     console.log(result)
  });

也可以使用“填充”

db.Employee.find(
  {
  },
)
  .populate("address", "pin Home Country")
  .exec(function(err, result) {
     console.log(result)
  });