我有一个http服务器(Nodejs)。当请求到来时,我获取数据并插入db(mongdodb)(如果已经有,我更新它)。但问题是当服务器获得并发请求时,mongodb将插入更多记录而不是更新现有记录。有解决方案吗
答案 0 :(得分:0)
处理此问题的一般方法是使用“upsert”。只要您具有用户定义的ID(即,不是由驱动程序生成),如果文档不存在,则“upsert”将插入文档,如果文档已存在,则更新文档提供的ID。
在下面的示例中,第一行将插入文档,第二行(它是相同的)将更新:
db.test.update(
{ _id: "my-own-id" },
{ $set: { name: "D", surname: "R", time: "11:34:27.1222" } } ,
{ upsert: true }
);
第一次,这将插入文件:
{
_id: "my-own-id",
name: "D",
surname: "R",
time: "11:34:27.1222"
}
现在,当它在一瞬间再次运行时,文档已经存在,因此它只是更新了:
db.test.update(
{ _id: "my-own-id" },
{ $set: { name: "D", surname: "R", time: "11:34:27.1223" } } ,
{ upsert: true }
);
现在,因为该文档已经存在,所以它刚刚更新:
{
_id: "my-own-id",
name: "D",
surname: "R",
time: "11:34:27.1223"
}
答案 1 :(得分:0)
我觉得它看起来像插入然后更新。但是当请求是并发的时候,它是否足够快速执行? 示例: 第一 { _id:“id” arr:[1] } 然后2个并发请求来更新arr { arr:[1,2] //将2附加到原始arr } { arr:[1,3] //追加3 } 它会是[1,2,3]还是[..]?因为请求是并发的,命令是否足够快才能更新?