Mongodb $ unset留下空数组对象(javascript)

时间:2014-05-04 11:24:37

标签: javascript node.js mongodb unset

我正在使用mongo“$unset”命令删除索引未知的特定条件的所有匹配文档。

让我们说集合看起来像: -

{
    "_id" : 1,
    "list" : [
        {
            "key" : "a"
        },
        {
            "key" : "b"
        },
        {
            "key" : "c"
        }
    ]
}

Mongo shell命令用于取消设置匹配"b":-

的键
db.test.update({"list.key":"b"}, {$unset: {'list.$.key':"b"}})

结果: -

{
    "_id" : 1,
    "list" : [ {"key" : "a"}, {}, {"key" : "c"} ]
}

需要答案: - 如何删除空数组对象?

注意: - 我已经阅读了建议使用$pull:null的页面,但这不适用于此处。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果确实首先想要unset,然后将数据丢失key从数组中删除,请使用:

db.test.update(
  { "_id": 1 },  // you can also use { } to clean up the whole collection
  { $pull: { "list": { "key": {$exists: false} } } }
)

但是,如果没有充分理由使用pull一次性完成:

db.test.insert({ 
  "_id" : 1, 
  "list" : [ { "key": "a" }, { "key": "b" }, { "key": "c" } ] 
})

您可以使用“提取”从list包含值为key的{​​{1}}的文档中删除:

b

这将从数组中删除相应的元素:

db.test.update({ 
  "list.key": "b" }, 
  { $pull: { "list": {"key": "b" } } 
})