2011-07-27 84 views
171
{ 
    name: 'book', 
    tags: { 
     words: ['abc','123'], 
     lat: 33, 
     long: 22 
    } 
} 

假设这是一个文档。如何从该集合中的所有文档中完全删除“words”?我希望所有的文件是没有 “words”:如何从MongoDB文档中完全删除一个字段?

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

回答

300

试试这个:如果你的收集是 '示例'

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

参见本:

http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset

UPDATE

上面的链接不再覆盖'$ unset'ing。 Nic Cottrell的下面的评论是现在要走的路。如果要从集合中的所有文档中删除此字段,请务必添加{multi: true};否则,它只会从它找到的第一个文档中删除它。更新的文档看到:

https://docs.mongodb.com/manual/reference/operator/update/unset/

例子:

db.example.update({}, {$unset: {words:1}} , {multi: true}); 
+0

你知道为什么错误的,真实的作品吗? –

+61

新版本支持更易读的格式:'db.example.update({},{$ unset:{words:1}},{multi:true})' –

+2

db.example.update({},{$ unset :{field:1,multi:true}})Nic的查询不适合我。 –

103

在开始的时候,我没有得到为什么这个问题有一个赏金(我认为这个问题有一个很好的答案,有没有什么需要补充的),但是我注意到被接受并提高了15倍的答案实际上是错误的!

是的,您必须使用$unset operator,但是这个未设置将删除集合文档中不存在的单词键。所以基本上它什么都不会做。

因此,您需要告诉mongo查看文档标签,然后使用dot notation查找单词。所以正确的查询是。

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

刚刚完成的缘故,我将把another way of doing it,这是差很多,但这样一来,你可以用任何自定义代码更改的字段(即使是基于另一个字段从这个文件)。

0

察看“字”的存在,然后从文件

db.users.update({"tags.words" :{$exists: true}}, 
              {$unset:{"tags.words":1}},false,true); 

真正消除指示是否匹配更新多个文档。

-6

要引用包和除去各种 “钥匙”, 尝试此

db['name1.name2.name3.Properties'].remove([ 
{ 
    "key" : "name_key1" 
}, 
{ 
    "key" : "name_key2" 
}, 
{ 
    "key" : "name_key3" 
} 
)] 
10

为了MongoDB中

  • 移除或删除字段对于单记录

    db.getCollection('userData').update({}, {$unset: {pi: 1}}) 
    
  • 多记录

    db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true}) 
    
-2

您还可以通过在3.4

使用的项目做到这一点在聚集{$项目:{ “tags.words”:0}}

0
db.example.updateMany({},{"$unset":{"tags.words":1}}) 

我们也可以用它来更新多个文件。

相关问题