Javascript Mongodb更新:我想要$inc{field:-1},但结果是{field:-2}(即递减1导致递减2)

Javascript Mongodb更新:我想要$inc{field:-1},但结果是{field:-2}(即递减1导致递减2),javascript,mongodb,decrement,Javascript,Mongodb,Decrement,我试图用循环更新多个文档,并将每个阶段中的“周”字段减少一(1)。看起来很简单,下面是代码: //Go through masterPhaseArray and decrement a week for each phase for(let i=0; i<res.locals.masterPhaseArray.length; i++){ console.log("doubles? "+res.locals.masterPhaseArray[i]._id

我试图用循环更新多个文档,并将每个阶段中的“周”字段减少一(1)。看起来很简单,下面是代码:

//Go through masterPhaseArray and decrement a week for each phase
for(let i=0; i<res.locals.masterPhaseArray.length; i++){
    
    console.log("doubles? "+res.locals.masterPhaseArray[i]._id)
    
    await Phases.findByIdAndUpdate({_id: res.locals.masterPhaseArray[i]._id}, {$inc: {weeks: -1}}, (err, doc) => {
         console.log("finished")
    })
}
正如您所看到的,_id只传递了一次,但数据库中的结果显示:

Before  { weeks: 6 }
After   { weeks: 4 }

我重新访问了$inc的MongoDB文档,这非常简单。我在谷歌上搜索过这个问题,也找不到类似的东西。欣赏任何新视角。

检查循环中的
masterPhaseArray
对象(计数和顺序)。 似乎在执行
Phases.findByIdAndUpdate
时,您及时向数组中添加了副本


从异步块进程中清除,并在循环完成后执行对
阵列的更改。

检查
主相位阵列中的对象(计数和顺序)。
似乎在执行
Phases.findByIdAndUpdate
时,您及时向数组中添加了副本


清理异步块进程,并在循环完成后执行对数组的更改。

发布此消息后,我尝试删除“异步”和“等待”,并解决了问题。但我不知道为什么?在我发布这篇文章之后,我尝试删除“async”和“wait”,它解决了这个问题。但我不知道为什么?我用多种方法测试了它,数组只包含(1)个对象。但是,似乎async/await以某种方式“保留”了查询,并允许双增量?@IsraelPeck async await等待,直到您的请求完成。六羟甲基三聚氰胺六甲醚。。。尝试创建阵列的副本并使用“for of”<代码>常量数组=[…res.locals.masterphaserray];对于(数组的常量项){…您的逻辑}
我用多种方法测试了它,数组只包含(1)个对象。但是,似乎async/await以某种方式“保留”了查询,并允许双增量?@IsraelPeck async await等待,直到您的请求完成。六羟甲基三聚氰胺六甲醚。。。尝试创建阵列的副本并使用“for of”<代码>常量数组=[…res.locals.masterphaserray];对于(数组的常量项){…您的逻辑}
Before  { weeks: 6 }
After   { weeks: 4 }