2010-09-09 3 views
6

Sort d'un noob mongo, et j'ai le sentiment que je suis abordant ce problème de la mauvaise direction.Comment mettre à jour basé sur les données existantes dans mongo

J'ai environ 7 millions de documents collection. Chaque document a deux champs que je veux modifier (pas remplacer), fondamentalement, ils sont de grandes chaînes qui ont \\n, et je veux remplacer ceux avec \n.

J'ai passé environ une heure à essayer de trouver un moyen de "référencer" l'objet retourné par la requête, qui n'existe pas totalement. Quelle est la meilleure approche pour quelque chose comme ça?

Répondre

6

Vous devez interroger pour tous les documents et les mettre à jour un par un. Si vous le faites en JavaScript, ce serait quelque chose comme:

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

Vous pouvez copier ce fichier dans un .js (par exemple, replace.js), changer les noms de db et de collecte, et l'exécuter comme un script à partir de l'interpréteur de commandes:

mongo replace.js 
+0

à peu près ce que je cherchais :) –

+0

Ouch, j'espérais que ce ne serait pas aussi compliqué ... –

Questions connexes