2011-12-27 4 views
43

Я удалил некоторые поля из определения документа. Я хочу удалить это поле по всем документам коллекции. Как мне это сделать?Как удалить устаревшие поля в Mongo?

+3

См [это весьма родственный вопрос] (http://stackoverflow.com/questions/4987289/how-to-remove-column-from-child-collection) – Cameron

ответ

112

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 и мульти.

db.collection.update(
    { '<field>': { '$exists': true } }, // Query 
    { '$unset': { '<field>': true } }, // Update 
    { 'multi': true }     // Options 
) 
+3

Значение, указанное для значения поля в операторе $ unset (т.е. 1 здесь), не влияет на операцию. [$ unset operator] (http://docs.mongodb.org/manual/reference/operator/unset/#_S_unset) – Xiao

29

просто сделать что-то вроде этого

db.people.find().forEach(function(x) { 
    delete x.badField; 
    db.people.save(x); 
}) 

ооо $unset ответ кто-то дал, используя update()here довольно удивительным тоже.

+0

Thx, Jamund. Ваш подход тоже работает. –

+0

Не может принять 2 ответа. Так что просто поддержал это. –

+0

Спасибо, это очень мило! –

Смежные вопросы