2010-09-09 8 views
6

Rodzaj mongo noob, i mam przeczucie, że zajmuję się tym problemem z niewłaściwego kierunku.Jak aktualizować na podstawie istniejących danych w Mongo

Mam około 7 milionów dokumentów. Każdy dokument ma dwa pola, które chcę, aby zmodyfikować (nie zastępować), w zasadzie są one dużymi ciągami, które mają \\n i chcę je zastąpić \n.

Spędziłem około godziny próbując znaleźć sposób na "powrót do referencji" obiektu zwróconego przez zapytanie, które zupełnie nie istnieje. Jakie jest najlepsze podejście do czegoś takiego?

Odpowiedz

6

Musisz zapytać o wszystkie dokumenty i aktualizować je jeden po drugim. Jeśli zrobisz to w JavaScript, byłoby coś jak:

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); 
} 

Możesz skopiować ten plik do .js (powiedzmy replace.js), zmienić nazwy DB i zbiórki i uruchomić go jako skrypt z powłoki:

mongo replace.js 
+0

prawie tego, czego szukałem :) –

+0

Ouch, miałem nadzieję, że to nie będzie tak zawiłe ... –