Mongodb匹配嵌套文档中的空对象

Pav*_*gin 11 mongodb

我只是想知道在单个请求中是否可以这样做?

特定

{
   _id: 1,
   foo: {
     fred: {},          // <- I want to remove empty keys like this
     barney: { bar: 1 } // <- But keep these keys
   }
}
Run Code Online (Sandbox Code Playgroud)

预期

{
   _id: 1,
   foo: {
     barney: { bar: 1 }
   }
}
Run Code Online (Sandbox Code Playgroud)

我知道如何在多个请求中执行此操作,但我正在尝试更好地理解MongoDB.


注意. fred在更新命令中变为空,例如{ $unset: { "fred.baz": 1 } }何时baz是最后一个键fred.

也许可以用它的内容删除它?但命令发送者不知道,除了baz此刻,还有其他任何密钥.

Ste*_*nie 13

你可以搜索空的嵌入式文档({ })和$unset它们..这是JS shell中的一个例子:

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