2016-07-26 1 views
0

まず、mongodb-promiseをMongoClientのラッパーとして使用しています。mongodb:collection.update inside cursor.eachは更新が完了する前に解決します

特定の基準に一致するコレクション "人"からすべてのレコードを取り出し、それぞれのレコードを更新する必要があります。そのために

私はすべての人を見つけるために、このコードを持っている:

return db.collection('people') 

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

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

Anは、各レコードを更新するために、これを起動します。

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

私は、ここで、bすべての人々を取得するために別の約束チェーンを追加!= 2と私は多くのレコードを見つけ、それらを数えました。しかし、このスクリプトを繰り返し実行すると、カウントが減少し、mongoは、約束がすでに解決されても他のレコードを更新していることを意味します。私はここで何が欠けていますか?

答えて

0

は多分:

.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

これは、より高速なクエリを作ったが、まだそれは問題を解決していません。更新がまだ完了していない場合でも、約束はまだ解決されます。 – user3631341

関連する問題