从MongoDB文档中删除字段

8 浏览
0 Comments

从MongoDB文档中删除字段

{ 
    name: 'book',
    tags: {
        words: ['abc','123'],
        lat: 33,
        long: 22
    }
}

假设这是一个文档。如何从该集合中完全删除所有文档中的\"words\"?我希望所有文档都没有\"words\":

 { 
     name: 'book',
     tags: {
         lat: 33,
         long: 22
     }
}

admin 更改状态以发布 2023年5月21日
0
0 Comments

一开始,我不知道为什么这个问题要设置悬赏(我认为问题已经有了很好的答案,没有什么可补充的),但后来我发现被接受并点赞15次的答案实际上是错误的!

是的,你需要使用$unset运算符,但是这个unset将会删除在集合中不存在的文档的“words”键。因此,这实际上什么也不会做。

所以,你需要告诉Mongo先查找文档中的tags,然后再查找words,使用点符号表示法。所以正确的查询是:

db.example.update(
  {},
  { $unset: {'tags.words':1}},
  false, true
)

为了完整起见,我将提到另一种方法,虽然这种方法更糟糕,但是你可以使用任何自定义代码(甚至基于文档中的另一个字段)更改字段。

0
0 Comments

尝试这样做:如果你的集合叫做 '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});

0