Nodejs在并发http请求时插入并更新db

时间:2014-01-10 04:03:47

标签: node.js mongodb

我有一个http服务器(Nodejs)。当请求到来时,我获取数据并插入db(mongdodb)(如果已经有,我更新它)。但问题是当服务器获得并发请求时,mongodb将插入更多记录而不是更新现有记录。有解决方案吗

2 个答案:

答案 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]还是[..]?因为请求是并发的,命令是否足够快才能更新?