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

标签 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之外还有没有其他的键。

最佳答案

您可以搜索空的嵌入文档 ({ }) 并对其进行 $unset .. 这是 JS shell 中的示例:

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

关于Mongodb 匹配嵌套文档中的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7597013/

相关文章:

javascript - MongoDB:填充或查询两个集合

mongodb - 更新/拉取 Mongodb/Mongoose 子文档数组中包含的数组中的值

javascript - Mongo解析错误: Invalid connection string

node.js - 为什么 res.render() 不能与 req.params.id 一起使用?

php - Imagick 和 GridFS

python - 无效文档 : Cannot encode object: ObjectId ('51861bc79bb6550f2b98be23' )

java - Mongo/Morphia StackOverflow 错误?

mongodb - 从每个组中选择前 N 行

Node.js 最佳 socket.io 实践(请求-响应与广播)

MongoDB 映射/减少计数