2010-09-09 19 views
6

Tipo de mongo noob, y tengo la sensación de que estoy abordando este problema desde la dirección incorrecta.Cómo actualizar en base a datos existentes en mongo

Tengo alrededor de 7 millones de colecciones de documentos. Cada documento tiene dos campos que quiero modificar (no reemplazar), básicamente son grandes cadenas que tienen \\n, y quiero reemplazarlas con \n.

Pasé aproximadamente una hora tratando de encontrar una forma de "referenciar atrás" el objeto devuelto por la consulta, que no existe por completo. ¿Cuál es el mejor enfoque para algo como esto?

Respuesta

6

Vas a tener que consultar a todos los documentos y actualizar uno por uno. Si lo hace en JavaScript, que sería algo así como:

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

puede copiar esto en un archivo .js (por ejemplo, replace.js), cambiar los nombres db y recaudación, y ejecutarlo como un guión desde el shell:

mongo replace.js 
+0

más o menos lo que estaba buscando :) –

+0

Ouch, esperaba que no fuera tan intrincado ... –

Cuestiones relacionadas