首页 文章

如何从MongoDB文档中完全删除字段?

提问于
浏览
213
{ 
    name: 'book',
    tags: {
        words: ['abc','123'],
        lat: 33,
        long: 22
    }
}

假设这是一份文件 . 如何删除“ words " completely from all the documents in this collection? I want all documents to be without " words ”:

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

9 回答

  • 130

    要引用包并删除各种“键”,请尝试此操作

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

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

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

    请参考:

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

    UPDATE

    以上链接不再涵盖'$unset' ing . 如果要从集合中的所有文档中删除此字段,请务必添加 {multi: true} ;否则,它只会从找到匹配的第一个文档中删除它 . 有关更新的文档,请参阅此

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

    例:

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

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

    是的,你必须使用$unset operator,但是这个未设置将删除对于集合的文档不存在的单词key . 所以基本上它什么也不做 .

    因此,您需要告诉Mongo查看文档标签,然后使用dot notation . 所以正确的查询是 .

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

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

  • -6

    To remove or delete field in MongoDB

    • 单个记录
    db.getCollection('userData').update({}, {$unset: {pi: 1}})
    
    • 对于多记录
    db.getCollection('userData').update({}, {$unset: {pi: 1}}, {multi: true})
    
  • 17
    db.example.updateMany({},{"$unset":{"tags.words":1}})
    

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

  • -2

    默认情况下,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})
    
  • 8

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

    答:

    db.tablename.remove({ 'tags.words':[ 'ABC', '123']})

  • 390

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

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

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

  • -3

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

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

相关问题