2016-07-26 5 views
0

Zuerst verwende ich mongodb-promise als Wrapper zu MongoClient.mongodb: collection.update innerhalb cursor.each verrechnet, bevor das Update abgeschlossen ist

Ich muss alle Datensätze aus einer Sammlung "people" abrufen, die bestimmten Kriterien entspricht, und sie dann aktualisieren.

Dafür habe ich diesen Code, alle Menschen zu finden:

return db.collection('people') 

.then((collection) => { 
    // Store reference to collection for future use 
    peopleCollection = collection; 

    return collection.find({a:1}) 
}) 

Ein dann diese aufrufen, jeden Datensatz zu aktualisieren:

.then((people) => { 

    // Process each people 
    return people.each((person) => { 

     person.b = 2; 

     // Where peopleCollection is a reference to my collection 
     return peopleCollection.update({_id: person._id}, person) 
    }) 
}) 

ich dann ein anderes Versprechen Kette hinzufügen, alle Menschen zu holen, wo b ! = 2 und ich finde viele Aufzeichnungen und ich zählte sie. Aber wenn ich dieses Skript wiederholt ausführe, sinkt die Anzahl, was bedeutet, dass mongo immer noch andere Datensätze aktualisiert, wenn das Versprechen bereits gelöst wurde. Was fehlt mir hier?

Antwort

0

Vielleicht:

.then((people) => { 

// Process each people 
return people.each((person) => { 


    // Where peopleCollection is a reference to my collection 
    return peopleCollection.update({_id: person._id}, {$set:{b:2}}) 
    }) 
}) 
+0

Dies machte die Abfrage schneller, aber noch ist es nicht das Problem lösen. Das Versprechen löst sich noch selbst das Update war noch nicht fertig. – user3631341

Verwandte Themen