2010-09-09 3 views
6

Una specie di mongo noob, e ho la sensazione che sto affrontando questo problema dalla direzione sbagliata.Come aggiornare in base ai dati esistenti in mongo

Ho circa 7 milioni di documenti raccolti. Ogni documento ha due campi che voglio modificare (non sostituire), in pratica sono grandi stringhe che hanno \\n, e voglio sostituire quelli con \n.

Ho passato circa un'ora cercando di trovare un modo per "referenziare" l'oggetto restituito dalla query, che totalmente non esiste. Qual è l'approccio migliore per qualcosa di simile?

risposta

6

Dovrete eseguire una query per tutti i documenti e aggiornare uno per uno. Se lo si fa in JavaScript, che sarebbe qualcosa di simile:

mydb = db.getSisterDB("whateverDBYoureUsing"); 
var cursor = mydb.foo.find(); 
while (cursor.hasNext()) { 
    var x = cursor.next(); 

    /* replace \\n with \n in x's strings ... */ 

    db.foo.update({_id : x._id}, x); 
} 

È possibile copiare questo in un file .js (diciamo, replace.js), cambiare i nomi db e raccolta, ed eseguirlo come uno script dalla shell:

mongo replace.js 
+0

praticamente quello che stavo cercando :) –

+0

Ouch, speravo che non fosse così contorto ... –