2011-12-27 11 views
43

Ho rimosso alcuni campi dalla definizione del documento. Voglio rimuovere questo campo su tutti i documenti di raccolta. Come posso farlo?Come rimuovere campi deprecati in Mongo?

+3

Sede [questa domanda altamente correlato] (http://stackoverflow.com/questions/4987289/how-to-remove-column-from-child-collection) – Cameron

risposta

112

Prova:

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

dove field è il vostro campo deprecato e collection è la collezione è stato rimosso dal.

Il comando di aggiornamento generale ha il formato db.collection.update(criteria, objNew, upsert, multi). Gli argomenti finali false e true disattivano la modalità upsert e abilitano il multi aggiornamento in modo che la query aggiorni tutti i documenti nella raccolta (non solo la prima corrispondenza).

Aggiornamento per MongoDB 2.2+

È ora in grado di fornire un oggetto JSON invece di argomenti posizionali per upsert e multi.

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

Il valore specificato per il valore del campo nell'istruzione $ unset (ovvero 1 qui) non influisce sull'operazione. [$ unset operator] (http://docs.mongodb.org/manual/reference/operator/unset/#_S_unset) – Xiao

29

solo fare qualcosa di simile

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

oooh la $unset risposta qualcuno ha dato usando update()here è abbastanza impressionante troppo.

+0

Thx, Jamund. Anche il tuo approccio funziona. –

+0

Non può accettare 2 risposte. Quindi lo hai appena svalutato. –

+0

Grazie, è molto gentile! –

Problemi correlati