【问题标题】:mongodb: collection.update inside cursor.each resolves before update is completedmongodb:cursor.each中的collection.update在更新完成之前解析
【发布时间】:2016-07-26 18:31:24
【问题描述】:

首先,我使用mongodb-promise 作为 MongoClient 的包装器。

我需要从符合特定条件的“人”集合中获取所有记录,然后更新每个记录。

为此,我有这段代码可以找到所有人:

return db.collection('people')

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

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

然后调用它来更新每条记录:

.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 仍在更新其他记录。我在这里错过了什么?

【问题讨论】:

    标签: mongodb promise


    【解决方案1】:

    也许:

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

    【讨论】:

    • 这使查询更快,但仍然不能解决问题。即使更新尚未完成,promise 仍然会解决。
    猜你喜欢
    • 2023-03-05
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多