Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Nodejs在并发http请求时插入和更新数据库_Node.js_Mongodb - Fatal编程技术网

Node.js Nodejs在并发http请求时插入和更新数据库

Node.js Nodejs在并发http请求时插入和更新数据库,node.js,mongodb,Node.js,Mongodb,我有一个http服务器(Nodejs)。当请求到来时,我获取数据并插入到db(mongdodb)(如果已经有了,我会更新它)。但问题是,当服务器收到并发请求时,mongodb将插入更多记录,而不是更新现有记录。有解决办法吗 处理此问题的一般方法是使用“upsert”。只要您有一个用户定义的ID(即,不是由驱动程序生成的),“upsert”将在文档不存在时插入文档,如果文档已经存在,则使用提供的ID更新文档 在以下示例中,第一行将插入文档,第二行(相同)将更新: db.test.update(

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

处理此问题的一般方法是使用“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"
}

我认为它看起来像是先插入然后更新。但当请求是并发的时,执行的速度是否足够快? 例子: 第一 { _id:“id” arr:[1] } 然后2个并发请求来更新arr { arr:[1,2]//将2追加到原始arr } { arr:[1,3]//追加3 }
是[1,2,3]还是[…]?因为请求是并发的,所以命令的更新速度是否足够快?

能否显示用于执行“更新”和“插入”的代码。。。看起来你根本没有做任何更新。我想它看起来像是先插入再更新。但当请求是并发的时,执行的速度是否足够快?例子: