嵌套数组中的MongoDB查询

嵌套数组中的MongoDB查询,mongodb,meteor,Mongodb,Meteor,我在MongoDB中有以下收藏: { "id": 123, "profile":{ "name": "name", "age":45, "wishlist": [ {"_id":1, "name":"a1"}, {"_id":2, "name":"a2"}, {"_id":3, "name":"a3"} ] } } Mongo Shell中的查询是什么,以查找wishlist是否有\u id=2的集

我在MongoDB中有以下收藏:

{
  "id": 123,
  "profile":{
    "name": "name",
    "age":45,
    "wishlist": [
        {"_id":1, "name":"a1"},
        {"_id":2, "name":"a2"},
        {"_id":3, "name":"a3"}
      ]
  }
}
Mongo Shell中的查询是什么,以查找
wishlist
是否有
\u id=2
的集合?

当您仅与一个字段匹配时,您只需使用点符号表示字段的路径:

> db.user.find({"profile.wishlist._id": 2})
如中所述,对于数组(如
wishlist
),如果数组中的任何子文档与字段值匹配,则这将与文档匹配


请注意,如果需要匹配多个字段,则需要使用:

  • $elemMatch
    如果所有匹配字段应属于同一子文档
  • 或者,如果不同字段不需要与同一子文档匹配,则使用点符号表示多个字段
请比较这两个查询的输出以了解这一点:

> db.user.find({"profile.wishlist._id": 2, "profile.wishlist.name": "a1"})
//                                      ^                            ^^
//                              will return your document even if the was no 
//                              subdocument having both _id=2 and name=a1
由于仅与一个字段匹配,因此只需使用点符号表示字段的路径:

> db.user.find({"profile.wishlist._id": 2})
如中所述,对于数组(如
wishlist
),如果数组中的任何子文档与字段值匹配,则这将与文档匹配


请注意,如果需要匹配多个字段,则需要使用:

  • $elemMatch
    如果所有匹配字段应属于同一子文档
  • 或者,如果不同字段不需要与同一子文档匹配,则使用点符号表示多个字段
请比较这两个查询的输出以了解这一点:

> db.user.find({"profile.wishlist._id": 2, "profile.wishlist.name": "a1"})
//                                      ^                            ^^
//                              will return your document even if the was no 
//                              subdocument having both _id=2 and name=a1