mongo findOneAndUpdate创建重复记录

时间:2020-07-28 15:33:46

标签: mongodb mongoose

我看到了一个类似的查询,但是没有找到合适的解决方案。

有时,我看到为相同的匹配条件创建的重复记录。感谢您在寻找解决方案方面的帮助。 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);
        }
    });

}

注意:问题已更新,其中根据收到的评论提供了更多信息。

  1. upsert为true是有意的,因为执行相同的例程进行添加和修改(用于匹配shopId和salesId)

  2. 仅作澄清。这并非总是情况。为了进行实验,我循环运行了10000次。我可以看到,有时它会插入1条以上的记录(我最多可以看到4条或5条),而不是10000条记录

  3. 可通过API端点访问此代码,其中一个EC2实例中托管有应用服务器(nodejs),而另一个EC2实例中托管了mongo

1 个答案:

答案 0 :(得分:1)

您可以将{ upsert: true }属性设置为false,这样,如果找不到文档,则不会插入新文档。