从MongoDB文档中删除字段
从MongoDB文档中删除字段
{ name: 'book', tags: { words: ['abc','123'], lat: 33, long: 22 } }
假设这是一个文档。如何从该集合中完全删除所有文档中的\"words
\"?我希望所有文档都没有\"words
\":
{ name: 'book', tags: { lat: 33, long: 22 } }
admin 更改状态以发布 2023年5月21日
一开始,我不知道为什么这个问题要设置悬赏(我认为问题已经有了很好的答案,没有什么可补充的),但后来我发现被接受并点赞15次的答案实际上是错误的!
是的,你需要使用$unset
运算符,但是这个unset
将会删除在集合中不存在的文档的“words”键。因此,这实际上什么也不会做。
所以,你需要告诉Mongo先查找文档中的tags,然后再查找words,使用点符号表示法。所以正确的查询是:
db.example.update( {}, { $unset: {'tags.words':1}}, false, true )
为了完整起见,我将提到另一种方法,虽然这种方法更糟糕,但是你可以使用任何自定义代码(甚至基于文档中的另一个字段)更改字段。
尝试这样做:如果你的集合叫做 'example'
db.example.update({}, {$unset: {words:1}}, false, true);
参考链接:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
更新:
上面的链接已经不再包括 '$unset'操作。如果你想从集合中的所有文档中删除这个字段,请确保添加 {multi: true}
; 否则,它只会从第一个找到匹配的文档中删除它。 参见更新的文档:
https://docs.mongodb.com/manual/reference/operator/update/unset/
示例:
db.example.update({}, {$unset: {words:1}} , {multi: true});