2012-08-28 25 views
6

estoy tirando de datos de una alimentación RETS (XML) y guardarlo en un local usando MongoDB nodo y la mangosta.actualización por lotes con Mangosta

Periódicamente es necesario que actualice los documentos y eliminar los inactivos, así como añadir nuevos. En lugar de hacer múltiples consultas a Mongo o al servidor de RETS, estaba haciendo ambas cosas y revisando los datos.

Esto funciona bien, pero hay una manera de salvar la Mangosta resultados de vuelta a la base de datos con actualizaciones e inserciones? ¿O necesito encontrar cada documento y actualizarlo individualmente?

Respuesta

11

actualizar varios documentos (no sólo uno) en MongoDB usando Mangosta puede utilizar la opción múltiples:

Model.update({ 
    field_that_matches_many_docs: ninja_variable 
}, { 
    $set: { size: 'large' } 
}, { 
    multi: true 
}, callback); 

Ver más en en la documentación Mangosta por updating documents y here

+0

Pero voy a hacer cientos o quizás miles de documentos. ¿Es posible actualizar por lotes de esta manera? – jabbermonkey

+0

Sí, puedes poner la opción '{multi: true}'. Como se ha descrito [aquí] (http://mongoosejs.com/docs/api.html#model_Model-update) –

+0

Gracias. Creo que puedo hacer que funcione. – jabbermonkey

0

Para completar Si alguno tiene múltiples condiciones de consulta y quieren añadir nuevos campos por cada juego de documentos condición de consulta entonces podemos ir con

var bulk = Person.collection.initializeUnorderedBulkOp(); 
    bulk.find(query1).update(update1); 
    bulk.find(query2).update(update2); 
    bulk.execute(callback); 

En siguiente documentación Se dice que db.collection.initializeUnorderedBulkOp()

Inicializa y devuelve una nueva granel operaciones() Builder para una colección . El constructor construye una lista desordenada de escritura operaciones que ejecuta MongoDB a granel. MongoDB ejecuta en paralelo las operaciones de escritura en la lista.

https://docs.mongodb.org/v3.0/reference/method/db.collection.initializeUnorderedBulkOp/

Cuestiones relacionadas