如何从MongoDB文档中完全删除一个字段?
{ name: 'book', tags: { words: ['abc','123'], lat: 33, long: 22 } }
假设这是一个文件。 如何从本集合中的所有文档中完全删除“ words
”? 我希望所有的文件都没有“ words
”:
{ name: 'book', tags: { lat: 33, long: 22 } }
试试这个:如果你的collections是“榜样”
db.example.update({}, {$unset: {words:1}}, false, true);
参考这个:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
更新 :
上面的链接不再覆盖“$ unset”。 Nic Cottrell的下面的评论是现在走的路。 如果要从集合中的所有文档中删除此字段,请务必添加{multi: true}
; 否则,只会从find的第一个文档中删除它。 查看更新的文档:
https://docs.mongodb.com/manual/reference/operator/update/unset/
例:
db.example.update({}, {$unset: {words:1}} , {multi: true});
起初我没有明白为什么这个问题有一个赏金的问题(我认为这个问题有一个很好的答案,没有什么需要补充的),但是我注意到接受并提出了15次答案其实是错误的!
是的,你必须使用$ unset操作符 ,但是这个未设置将删除集合文档中不存在的单词键。 所以基本上它什么都不会做。
所以你需要告诉mongo在文档标签中查看,然后用点符号表示文字。 所以正确的查询是。
db.example.update( {}, { $unset: {'tags.words':1}}, false, true )
只是为了完成,我会参考另一种做法 ,这是更糟糕的方式,但这样你可以改变字段与任何自定义代码(甚至基于本文档的另一个字段)。
删除或删除MongoDB中的字段
-
对于单个logging
db.getCollection('userData').update({}, {$unset: {pi: 1}})
-
多logging
db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
检查是否存在“单词”,然后从文档中删除
db.users.update({"tags.words" :{$exists: true}}, {$unset:{"tags.words":1}},false,true);
如果匹配,则表示更新多个文档。
db.example.updateMany({},{"$unset":{"tags.words":1}})
我们也可以用它来更新多个文件。
你也可以通过使用3.4中的项目来进行汇总
{$ project:{“tags.words”:0}}
要引用一个包并删除各种“键”,请试试这个
db['name1.name2.name3.Properties'].remove([ { "key" : "name_key1" }, { "key" : "name_key2" }, { "key" : "name_key3" } )]