在MongoDB中检索嵌入的文档

时间:2016-12-22 12:40:36

标签: mongodb

我有一个像这样的元素的集合:

{
    _id: 585b...,
    data: [
        {
            name: "John",
            age: 30
        },
        {
            name: "Jane",
            age: 31
        }
    ]
}

我知道如何找到包含John的文档:

db.People.find({"data.name", "John"})

然后我得到整个文件。我怎样才能获得嵌入式文档。所以我想回复一下:

{
    name: "John",
    age: 30
}

对于上下文:这是较大数据集的一部分,我需要检查是否对此特定文档进行了某些更新。由于应用程序的实现方式,嵌入式文档并不总是处于同一索引中。

那么如何查询和返回嵌入文档呢?

1 个答案:

答案 0 :(得分:0)

使用第二个参数来取消ID

db.people.find({"data.name", "John"}, {_id : 0})

这将输出

data: [
    {
        name: "John",
        age: 30
    },
    {
        name: "Jane",
        age: 31
    }
]

要获得嵌入式文档,请使用聚合。

db.test.aggregate([
  {
    $unwind : "$data"
  },
  {
    $match : {"data.name" : "John"}
  },
  {
    $project : {
      _id : 0,
      name : "$data.name",
      age : "$data.age"
    }
  }
])