2011-09-29 73 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 
)