Mongodb $unset 留下空数组对象(javascript)
Posted
技术标签:
【中文标题】Mongodb $unset 留下空数组对象(javascript)【英文标题】:Mongodb $unset leaves empty array object(javascript) 【发布时间】:2014-06-20 18:18:40 【问题描述】:我正在使用 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】:如果您真的想先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
包含key
的值为b
:
db.test.update(
"list.key": "b" ,
$pull: "list": "key": "b"
)
这会从数组中删除相应的元素:
db.test.find()
"_id" : 1, "list" : [ "key" : "a" , "key" : "c" ]
【讨论】:
非常感谢!两种方法都对我有用,我更喜欢直接 $pull 进行一项较小的操作。以上是关于Mongodb $unset 留下空数组对象(javascript)的主要内容,如果未能解决你的问题,请参考以下文章
我可以将数组对象推送到 mongodb 上的空数组吗? (使用去)
mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......)
mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......)