2011-09-29 48 views
7

我只是想知道這是否可以在單個請求中執行?Mongodb匹配嵌套文檔中的空對象

鑑於

{ 
    _id: 1, 
    foo: { 
    fred: {},   // <- I want to remove empty keys like this 
    barney: { bar: 1 } // <- But keep these keys 
    } 
} 

預計

{ 
    _id: 1, 
    foo: { 
    barney: { bar: 1 } 
    } 
} 

我知道怎麼做了幾個要求,但我想了解MongoDB的更好。


注意。fred在更新命令如{ $unset: { "fred.baz": 1 } }中變爲空時bazfred中的最後一個鍵。

也許有可能將其內容刪除?但是命令發送者不知道,除了baz之外還有其他的鍵。

回答

8

您可以搜索空嵌入文檔({ })和$unset他們..這裏是在JS殼爲例:

db.mycoll.update(
    {'foo.fred':{ }}, 
    { $unset: {'foo.fred':1} }, 
    false, // upsert: no 
    true // multi: find all matches 
)