2013-05-09 44 views
1

我有一個嵌入式集合的文檔,但很少元素缺少一個鍵,我必須找到所有這些元素。這裏有一個例子: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) 

我需要返回「酒吧」對象,因爲其內嵌的一個沒有鑰匙「的myKey」查詢。

我嘗試使用$exists,但它返回只有當所有的嵌入式元素缺少關鍵

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

我怎麼能找到至少一個嵌入元素缺少關鍵「的myKey」的文件?

回答

1

如果 '價值' 是始終存在的,那麼你可以試試這個命令

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

'$ elemMatch'解決我的問題! 這裏是最後一個查詢: 'db.example.find({'embedded':{'$ elemMatch':{'myKey':{'$ exists':false}}}})'''' – 2013-05-09 17:09:49