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

我正在使用mongo“ $unset ”命令来删除所有匹配的文件,其索引是未知的。

比方说收集看起来像: –

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

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

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

结果:-

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

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

注意: – 我读过的页面build议使用$pull:null ,但这不适合在这里。

谢谢!

如果你真的想先unset它,然后从数组中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" } ] }) 

您可以使用pull从list包含值为bkey的文档中删除:

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

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

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