我总是发现我自己在这样的情况下,当我需要作出一些更新请求的基础上的一些条件。
if (some true condition) {
let recordBeforeUpdate = await this.PatchModel.findOneAndUpdate({ "_id": patchId }, { $inc: { inStockPallets: -1, fullfilledPallets: 1 } }, { returnDocument: "before" });
debug(recordBeforeUpdate);
if (another true condition) { //based on the recordBeforeUpdate
let patch = await this.PatchModel.updateOne({ "_id": patchId }, { $set: {isFulfilled: true} });
debug(patch);
}
}
字符串
我在这里寻找最佳实践,我已经使用了两个对数据库的请求,并且我首先使用findOneAndUpdate
,以便能够在更新时获得记录,而不是通过第三个findOne
请求获得记录。
那么我应该如何在一个请求中向数据库提交这些内容呢?
1条答案
按热度按时间n6lpvg4x1#
mongoose
findOneAndUpdate
方法接受聚合管道,因此您可以对聚合阶段内的特定字段运行条件更新。您需要使用$add
来递增inStockPallets
和fullfilledPallets
的值,而不是$inc
,但这很简单。正如您所看到的,这两个更改都是在一个数据库操作中完成的。因为你没有共享你的模式,我假设你有一个名为
delivered
的字段,它是一个String
,当它的值是yes
时,你想把isFulfilled
设置为true
,否则它将是false
。显然,你可以修改它以满足你的需要:字符串