给定收集" foo",我们有字段" bar"看起来像这样:
"bar": [{uid:1, mid: 10}, {uid:1, mid: 12}, {uid:2, mid: 14}, {uid:2, mid: 15}, {uid:2, mid: 18}]
如何进行查询以获取所有" foos"在球场" bar"满足以下条件:" uid" = 2和" mid"在[14,18]
答案 0 :(得分:2)
有两种解释条件的方法
满足以下条件的字段“bar”上的所有“foos”:“uid”= 2和[14,18]中的“mid”
您的意思是“查找foo
集合中的所有文档,以使e
数组符合bar
和e.uid = 2
的元素e.mid
为[14,18]的一个元素“?如果是这样,用mongo shell编写的MongoDB查询是
db.foo.find({ "bar" : { "$elemMatch" : { "uid" : 2, "mid" : { "$in" : [14, 18] } } } })
您的意思是“查找foo
集合中的所有文档,以便[14,18]中的bar.uid
值为2且bar.mid
”?如果是这样,用mongo shell编写的MongoDB查询是
db.foo.find({ "bar.uid" : 2, "bar.mid" : { "$in" : [14, 18] } })
以下示例演示了这些查询之间的差异:
> db.foo.drop()
> db.foo.insert({ "_id" : 0, "bar" : [{ "uid" : 2, "mid" : 14 }] })
> db.foo.insert({ "_id" : 1, "bar" : [{ "uid" : 2, "mid" : 99 }, { "uid" : 3, "mid" : 18 }] })
// first version
> db.foo.find({ "bar" : { "$elemMatch" : { "uid" : 2, "mid" : { "$in" : [14, 18] } } } })
{ "_id" : 0, "bar" : [{ "uid" : 2, "mid" : 14 }] }
// second version
> db.foo.find({ "bar.uid" : 2, "bar.mid" : { "$in" : [14, 18] } })
{ "_id" : 0, "bar" : [{ "uid" : 2, "mid" : 14 }] }
{ "_id" : 1, "bar" : [{ "uid" : 2, "mid" : 99 }, { "uid" : 3, "mid" : 18 }] }