提问



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


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


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

最佳参考


试试这个:如果你的收藏是例子


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


请参考:


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


更新:


以上链接不再涵盖$ unset。 Nic Cottrell在下面的评论是现在的方法。如果你想从集合中的所有文件中删除这个字段,请务必添加{multi: true};否则,它只会从第一个文档中删除它发现匹配。请参阅此更新文档:


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


例:


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

其它参考1


一开始,我不明白为什么这个问题有一个赏金(我认为这个问题有一个很好的答案,没有什么可补充的),但后来我注意到被接受和赞成15次的答案实际上是错的!


是的,你必须使用$unset运算符,但是这个未设置将删除对于集合的文档不存在的单词key。所以基本上它什么都不做。[20]


因此,您需要告诉Mongo查看文档标签,然后使用点表示法。所以正确的查询是。[21]


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


仅仅为了完成,我将参考另一种方法,这更糟糕,但这样你可以用任何自定义代码更改字段(甚至基于本文档中的另一个字段)。

其它参考2


删除或删除MongoDB中的字段



  • 单曲


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

  • 对于多记录


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


其它参考3


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


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

其它参考4


默认情况下,update()方法更新单个文档。设置多参数以更新符合查询条件的所有文档。


版本3.6中已更改。
句法 :


db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)


示例:


db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})


在你的例子中:


db.getCollection('products').update({},{$unset: {'tags.words' :1}},  {multi: true})

其它参考5


检查是否存在单词,然后从文档中删除


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


true表示如果匹配则更新多个文档。

其它参考6


您也可以使用3.4中的项目进行聚合


{$ project:{tags.words:0}}

其它参考7


要引用包并删除各种键,
尝试这个


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