如何删除Mongo中不推荐使用的字段?

Ale*_*rov 44 mongodb

我从文档定义中删除了一些字段.我想在所有收集文件中删除此字段.我该怎么做?

Tyl*_*ock 113

尝试:

db.collection.update(
    { '<field>': { '$exists': true } },  // Query
    { '$unset': { '<field>': true  } },  // Update
    false,                               // Upsert
    true                                 // Multi-update
)
Run Code Online (Sandbox Code Playgroud)

field您不推荐使用的字段在哪里collection,是从中删除的集合.

常规更新命令是表单db.collection.update( criteria, objNew, upsert, multi ).在falsetrue尾随参数禁用UPSERT模式,并支持多更新,以便查询更新所有的文档的集合(不只是第一场比赛)英寸

MongoDB 2.2+的更新

您现在可以为upsert和multi提供JSON对象而不是位置参数.

db.collection.update(
    { '<field>': { '$exists': true } },  // Query
    { '$unset': { '<field>': true  } },  // Update
    { 'multi': true }                    // Options
)
Run Code Online (Sandbox Code Playgroud)

  • $ unset语句中字段值的指定值(即此处为1)不会影响操作.[$ unset operator](http://docs.mongodb.org/manual/reference/operator/unset/#_S_unset) (3认同)

Jam*_*son 29

做这样的事情

db.people.find().forEach(function(x) {
   delete x.badField;
   db.people.save(x);
})
Run Code Online (Sandbox Code Playgroud)

哦,$unset有人在update() 这里使用的答案也非常棒.

  • 这是有用的模式,但仅当您需要执行可能需要对每个文档进行复杂处理的非平凡更新时. (5认同)
  • 不要这样做.对于大型集合,此方法将非常慢,因为它会为每个项目单独处理每个项目运行多个查询. (3认同)