Mongodb$unset保留空数组对象(javascript)
我正在使用mongo“Mongodb$unset保留空数组对象(javascript),javascript,node.js,mongodb,unset,Javascript,Node.js,Mongodb,Unset,我正在使用mongo“$unset”命令删除索引未知的特定条件下的所有匹配文档 假设集合看起来像:- { "_id" : 1, "list" : [ { "key" : "a" }, { "key" : "b" }, { "key" : "c" } ] } Mongo shell命令,用于取消设置与“b”
$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
,但这不适合这里
谢谢 如果您确实想先取消设置,然后将缺少的元素键
从阵列中拉出,请使用:
db.test.update(
{ "_id": 1 }, // you can also use { } to clean up the whole collection
{ $pull: { "list": { "key": {$exists: false} } } }
)
但是,如果没有充分的理由使用拉
一次性完成:
db.test.insert({
"_id" : 1,
"list" : [ { "key": "a" }, { "key": "b" }, { "key": "c" } ]
})
您可以使用pull从文档中删除列表
包含值为b的键
:
db.test.update({
"list.key": "b" },
{ $pull: { "list": {"key": "b" } }
})
这将从阵列中删除相应的元素:
db.test.find()
{ "_id" : 1, "list" : [ { "key" : "a" }, { "key" : "c" } ] }
谢谢!这两种方法对我都有效,我更喜欢直接$pull进行一次较小的操作。