根据mongodb doc,$elemmatch的语法是,

t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } )

我试过了,效果很好。
上面的意思是,它可以找到数组x中是否存在对象{a:1,b:'more 1'}。
我有一个要求,我需要弄清楚,一个数组中的所有对象是否都存在于数据库中。
例如,假设我有一个数组,
a=[{a:1, b:2},{a:3, b:4}, {a:5, b:6}]

我需要找出x是否包含所有这些元素。
t.find({x:{$elemmatch:{a:{$all:[1]},b:{$all:[2]}}})找到包含{a:1,b:2}的所有x
但如果我尝试,它就失败了。我知道这是不对的。
我有办法做到这一点吗?
好吧,应该是,
t.find( { x : { $elemMatch : {$all:[ {a:1, b:2}, {a:3, b:4}] } } )

我试过了,没用。

最佳答案

t.find({$and:[{a:{$elemMatch:{a:1, b:2}}}, {a:{$elemMatch:{a:3, b:4}}}, {a:{$elemMatch:{a:5, b:6}}}]})

不过,这并不是一个特别高性能的选择。

关于mongodb - mongodb $ elemMatch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9207335/

10-09 22:25