Я удалил некоторые поля из определения документа. Я хочу удалить это поле по всем документам коллекции. Как я могу это сделать?
Как удалить устаревшие поля в Mongo?
Ответ 1
Try:
db.collection.update(
{ '<field>': { '$exists': true } }, // Query
{ '$unset': { '<field>': true } }, // Update
false, // Upsert
true // Multi-update
)
где field
- ваше устаревшее поле, а collection
- это сбор, из которого он был удален.
Общая команда обновления имеет вид db.collection.update( criteria, objNew, upsert, multi )
. Возвращаемые аргументы false
и true
отключают режим upsert и активируют множественное обновление, чтобы запрос обновлял все документы в коллекции (а не только первое совпадение).
Обновление для MongoDB 2.2 +
Теперь вы можете предоставить объект JSON вместо позиционных аргументов для upsert и multi.
db.collection.update(
{ '<field>': { '$exists': true } }, // Query
{ '$unset': { '<field>': true } }, // Update
{ 'multi': true } // Options
)
Ответ 2
просто сделайте что-нибудь подобное
db.people.find().forEach(function(x) {
delete x.badField;
db.people.save(x);
})
oooh ответ $unset
, который кто-то дал с помощью update()
здесь, тоже очень классный.