MongoDB中执行多个查询同时
问题描述:
我想创建一个记录,如果因此它首先我执行一个查询来查找特定的记录不存在于数据库,如果不存在,则执行anoter查询来创建它。MongoDB中执行多个查询同时
但问题是,如果多个请求来在同一时间同一数据。所有请求都试图找到该记录,并且由于它尚未创建,它们都会通过第一个条件并在数据库中创建。
为前。 我在数据库中有“开始”和“结束”字段。我不希望任何有创纪录的重叠时刻所以它首先我找到执行查询,如下:
db.slots.find({
from: {
$lte: req.body.end
},
to: {
$gte: req.body.from
}
})
,如果没有,然后记录存在我执行创建查询一样,我回到效应初探而不产生缝隙。
所以如果两个请求来在同一时间同一时隙定时那么这两个过程首先找到查询如尚未创建没有记录,然后都得到建立,所以我想implment有点像“锁定”。
答
您可以编写一个函数。在函数内部完成这两项任务。并使功能并行。由全球承诺。
var mypromise;
function myfunction(){
if(mypromise) return mypromise;
mypromise = new Promise(
function (resolve, reject) {
···
resolve(value); // success
mypromise = false;
});
return mypromise;
}
我没有怎么办呢。你可以给它任何示例代码吗? – Sachin
我不是在寻找单一请求的解决方案。对于单个请求无需承诺就可以轻松完成。在多个请求的情况下,这个代码块将执行而不创建对集合的锁定,并且将创建重复记录。 – Sachin
不,第二次调用函数会得到第一次调用的结果。 – enRaiser