我面临一个问题,即MongoDB两次插入相同的文档。但是,这种情况很少见。
我正在编码一个实时统计网站,其中仅包含足球统计信息。要将文档首先插入数据库,请检查是否存在相同的匹配项。然后,如果存在匹配项,请使用新值对其进行更新。而已。我不能共享所有代码,但是我正在使用带有upsert选项的findOneandUpdate方法。在findOneandUpdate方法中,我必须使用“ doc.save()”保存从回调中返回的文档,然后再对其进行修改。在该脚本中,我正在使用Cronjob(node-cron库),并且它每分钟都在运行。大多数情况下,我会获得想要用新结果更新的结果(如果存在)。但是有时您会在图像中看到两次插入结果的情况。
//in async forEach,
await MatchObject.findOneAndUpdate({matchid: id}, // find a document with that filter
modelDoc, // document to insert when nothing was found
{upsert: true, new: true, runValidators: true, useFindAndModify: false}, // options
function (err, doc) { })
//Also inside findOneAndUpdate method i have save method that is modified with returned document from findOneAndUpdate method.
doc.save().then(res => console.log(res));
节点v11.15.0 MongoDB Shell版本v4.0.10 mongoDB版本v4.0.10 猫鼬5.6.2