Mongodb:查找缺少某个键的嵌入元素

Mongodb:查找缺少某个键的嵌入元素,mongodb,Mongodb,我有一个包含嵌入式集合的文档,但是很少有元素缺少一个键,我必须找到所有这些元素。以下是一个例子: var foo = {name: 'foo', embedded: [{myKey: "1", value: 3}, {myKey: "2", value: 3}]} db.example.insert(foo) var bar = {name: 'bar', embedded: [{value: 4}, {myKey: "3", value: 1}]} db.example.insert(bar)

我有一个包含嵌入式集合的文档,但是很少有元素缺少一个键,我必须找到所有这些元素。以下是一个例子:

var foo = {name: 'foo', embedded: [{myKey: "1", value: 3}, {myKey: "2", value: 3}]}
db.example.insert(foo)
var bar = {name: 'bar', embedded: [{value: 4}, {myKey: "3", value: 1}]}
db.example.insert(bar)
我需要一个返回“bar”对象的查询,因为其中一个嵌入对象没有键“myKey”

我尝试使用
$exists
,但它仅在所有嵌入元素都缺少键时返回

db.example.find({'embedded.myKey': {$exists: true}}).size()
// -> 2
db.example.find({'embedded.myKey': {$exists: false}}).size()
// -> 0

如何查找至少有一个嵌入元素缺少键“myKey”的文档?

如果“value”始终存在,则可以尝试此命令

db.example.find({ embedded : { $elemMatch : { value : {$exists : true},  myKey : {$exists : false}}  }})
{ "_id" : ObjectId("518bbccbc9e49428608691b0"), "name" : "bar", "embedded" : [ { "value" : 4 }, { "myKey" : "3", "value" : 1 } ] }

$elemMatch
解决了我的问题!这是最后一个查询:
db.example.find({'embedded':{'elemMatch':{'myKey':{'exists':false}}})