MongoDB$,并在单个嵌入文档中查询多个字段和值

MongoDB$,并在单个嵌入文档中查询多个字段和值,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在寻找一种查询集合的方法,如下所示: [{ name: "Parent 1", items: [ { name: "Child 1", age: "60" }, { name: "Child at heart", age: "27" } ] }, { name: "Parent 2", items: [ { name: "Child 3", age: "10" }, { name: "Child 4", age: "15" },

我正在寻找一种查询集合的方法,如下所示:

[{ 
  name: "Parent 1",
  items: [
    { name: "Child 1", age: "60" },
    { name: "Child at heart", age: "27" }
  ]
 },

 {
  name: "Parent 2",
  items: [
    { name: "Child 3", age: "10" },
    { name: "Child 4", age: "15" },
    { name: "Child at heart", age: "60" }
  ]
 }
]
db.collection.find( 'items.name' => "Child at heart", 'items.age' => "60" )
对于这样的查询:

[{ 
  name: "Parent 1",
  items: [
    { name: "Child 1", age: "60" },
    { name: "Child at heart", age: "27" }
  ]
 },

 {
  name: "Parent 2",
  items: [
    { name: "Child 3", age: "10" },
    { name: "Child 4", age: "15" },
    { name: "Child at heart", age: "60" }
  ]
 }
]
db.collection.find( 'items.name' => "Child at heart", 'items.age' => "60" )
并仅获取名为“Parent 2”的对象的结果。也就是说,我想查询文档,查找包含嵌入项的文档,该嵌入项在相同的嵌入文档中既有一个名为“Child in heart”、又有年龄为“60”的嵌入项。相反,此查询返回两个文档“父1”和“父2”

如何在同一嵌入文档中的不同字段上使用$and条件进行查询


谢谢。

这里的问题是,
$和
接受每个条件,将其应用于所有嵌入的文档,如果任何嵌入的文档匹配,则将该文档视为满足条件。它与条件没有关联

您需要的操作员是
$elemMatch
。它执行您要查找的关联。以下是正确的查询:

db.collection.find({items: {$elemMatch: {name: 'Child at heart', age: '60'} }})
items
是要搜索的数组的名称

对示例数据的查询输出:

{
"_id" : ObjectId("51a012f0ac3dfe4f0c05ca89"),
"name" : "Parent 2",
"items" : [
    {
        "name" : "Child 3",
        "age" : "10"
    },
    {
        "name" : "Child 4",
        "age" : "15"
    },
    {
        "name" : "Child at heart",
        "age" : "60"
    }
]
}

使用$elemMatch:感谢阿披谢克的快速回答。这正是我想要的。保罗,谢谢你的详细回复。我接受了这个答案。