2012-08-28 12 views
6

Sto prelevando dati da un feed RETS (XML) e salvandolo in un MongoDB locale utilizzando nodo e mangusta.Aggiornamento batch con Mongoose

Periodicamente ho bisogno di aggiornare i documenti ed eliminare quelli inattivi così come aggiungerne di nuovi. Invece di effettuare più query su Mongo o sul server RETS, stavo tirando entrambe le cose e facendo scorrere i dati.

Questo funziona correttamente ma esiste un modo per salvare i risultati di Mongoose nel database con aggiornamenti e inserti? O devo trovare ogni documento e aggiornarlo individualmente?

risposta

11

Per aggiornare più documenti (non solo uno) su MongoDB usando Mongoose è possibile utilizzare l'opzione più:

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

Vedi più nella documentazione Mongoose per updating documents e here

+0

Ma io cercherò di fare centinaia o forse migliaia di documenti. È possibile aggiornare i batch in questo modo? – jabbermonkey

+0

Sì, puoi mettere l'opzione '{multi: true}'. Come descritto [qui] (http://mongoosejs.com/docs/api.html#model_Model-update) –

+0

Grazie. Penso di poter fare quel lavoro. – jabbermonkey

0

Per completezza , Se uno ha più condizioni di query e desidera aggiungere nuovi campi per ogni documento corrispondente della condizione di query, allora possiamo andare con

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

Nel seguente documentazione Si dice che db.collection.initializeUnorderedBulkOp()

Inizializza e restituisce un nuovo Bulk operazioni() Cantiere per una collezione . Il costruttore costruisce un elenco non ordinato di operazioni di scrittura eseguite da MongoDB alla rinfusa. MongoDB esegue in parallelamente le operazioni di scrittura nell'elenco.

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

Problemi correlati