我看到了一个类似的查询,但是没有找到合适的解决方案。
有时,我看到为相同的匹配条件创建的重复记录。感谢您在寻找解决方案方面的帮助。 MongoDB服务器版本:4.2.7 “猫鼬”:“ ^ 5.9.6”
function addModify() {
Sales.findOneAndUpdate(
{
shopId: shopId,
SalesId: SalesId
},
{
$set:
{
amount: amount
lastUpdated: new Date
}
}
, { upsert: true }, function (err, list) {
if (err) {
logger.error(' Sales-- error - ' + ' - ' + JSON.stringify(err));
cb({ err: 'failed transcation log' });
} else {
cb(null, null);
}
});
}
注意:问题已更新,其中根据收到的评论提供了更多信息。
upsert为true是有意的,因为执行相同的例程进行添加和修改(用于匹配shopId和salesId)
仅作澄清。这并非总是情况。为了进行实验,我循环运行了10000次。我可以看到,有时它会插入1条以上的记录(我最多可以看到4条或5条),而不是10000条记录
可通过API端点访问此代码,其中一个EC2实例中托管有应用服务器(nodejs),而另一个EC2实例中托管了mongo
答案 0 :(得分:1)
您可以将{ upsert: true }
属性设置为false
,这样,如果找不到文档,则不会插入新文档。