2011-05-31 15 views
8

Usando el shell mongodb, estoy tratando de agregar una nueva propiedad a cada documento en una gran colección. La colección (Listado) tiene una propiedad existente llamada Dirección. Simplemente estoy tratando de agregar una nueva propiedad llamada LowerCaseAddress que se puede usar para buscar, por lo que no necesito usar una expresión regular que no distinga entre mayúsculas y minúsculas para la coincidencia de direcciones, que es lenta.Agregar nueva propiedad a cada documento en una gran colección

Aquí es el guión He intentado utilizar en la cáscara:

for(var c = db.Listing.find(); c.hasNext();) { 
    var listing = c.next(); 
    db.Listing.update({ LowerCaseAddress: listing.Address.toLowerCase() }); 
} 

Se corrió durante aproximadamente 6 horas y luego se estrelló mi PC. ¿Hay una mejor manera de agregar una nueva propiedad a cada documento en una colección grande (~ 4 millones de registros)?

+0

Parece que se echa en falta algunos parámetros de las correspondientes actualizaciones - usted no tiene un criterio por lo que podría estar tratando de actualizar cada grabar en cada iteración del ciclo. (No estoy seguro de cómo se comporta mongo si no establece un criterio sobre la actualización) –

+0

javascript aquí no funciona. Eche un vistazo a la respuesta de Sid Burn. Además, si tiene que actualizar montones y montones de documentos, probablemente desee hacerlo en lotes para evitar el bloqueo y tener un punto de control para el progreso en caso de que algo falle. –

Respuesta

17

JavaScript no funciona, pero el código siguiente funciona. Pero no sé cuánto tiempo lleva 4 millones de registros.

db.Listing.find().forEach(function(item){ 
    db.Listing.update({_id: item._id}, {$set: { LowerCaseAddress: item.Address.toLowerCase() }}) 
}) 
+0

Esta consulta tomó un tiempo pero funcionó, ¡¡¡gracias !! – Justin

1

Puede utilizar updateMany para esto también:

try { db.<collection>.updateMany({}, {$set: { LowerCaseAddress: item.Address.toLowerCase() } }); } catch(e) { print(e); }

Cuestiones relacionadas