如何从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" } )]