与给定合集“富”,我们有场“酒吧”,看起来像这样:复杂蒙戈阵列查询
"bar": [{uid:1, mid: 10}, {uid:1, mid: 12}, {uid:2, mid: 14}, {uid:2, mid: 15}, {uid:2, mid: 18}]
我怎样才能使一个查询,以便对场“酒吧”获取所有“的Foo”那下面的条件满足:“UID”= 2,[14,18]
与给定合集“富”,我们有场“酒吧”,看起来像这样:复杂蒙戈阵列查询
"bar": [{uid:1, mid: 10}, {uid:1, mid: 12}, {uid:2, mid: 14}, {uid:2, mid: 15}, {uid:2, mid: 18}]
我怎样才能使一个查询,以便对场“酒吧”获取所有“的Foo”那下面的条件满足:“UID”= 2,[14,18]
“中” 有两种方法来解释你的病情
所有 “FOOS” 场上 “栏” 即满足以下条件:“uid”= 2 a第二“中” [14,18]
你的意思是“发现在foo
收集这样所有的文档存在bar
阵列满足e.uid = 2
和e.mid
的元素e
是[14,18元素]“?如果是这样,MongoDB的查询,写在蒙戈外壳,是
db.foo.find({ "bar" : { "$elemMatch" : { "uid" : 2, "mid" : { "$in" : [14, 18] } } } })
你的意思是“发现在foo
收集这样所有的文档,有2 bar.mid
值的bar.uid
值[14,18] “?如果是这样,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 }] }
嗨!足够近。然而,“bar.mid”必须有来自给定表达式“$ in”的所有成员:[14,18]。我尝试使用“$ all”操作符,但没有任何反应。 – dakt 2015-04-03 07:46:16
你可以放松了。那么,做出这样的查询更容易。你想对所有集合执行这个查询? – 2015-04-02 16:02:24
不是$ unwind仅用于聚合框架吗?不,我只想查询一个集合。 – dakt 2015-04-02 16:33:34
你是对的,它用于聚合。我以复杂的方式思考,可以轻松完成。我的坏... – 2015-04-02 20:00:39