mongodb同时执行多个查询

时间:2016-08-05 09:08:33

标签: node.js mongodb mongoose

我想创建一个记录,如果在DB中不存在,那么首先我执行查询以找到该特定记录,如果不存在,则执行anoter查询以创建它。

但问题是,如果同一数据同时出现多个请求。所有请求都试图找到该记录,因为它尚未创建,它们都会通过第一个条件并在DB中创建。

代表。 我在DB中有“开始”和“结束”字段。我不希望任何记录有重叠时间,所以首先我执行查询查询如下:

db.slots.find({
    from: {
        $lte: req.body.end
    },
    to: {
        $gte: req.body.from
    }
})

如果没有记录,那么我执行创建查询,否则我返回响应而不创建插槽。

所以如果两个请求同时出现相同的插槽时序,那么两个请求都先传递查找,因为还没有创建记录,然后两者都被创建,所以我想要实现类似“锁定”的东西。

1 个答案:

答案 0 :(得分:0)

您可以编写一个功能。并在函数内部执行任务。并使函数并发。通过全球承诺。

var mypromise;   
function myfunction(){
if(mypromise) return mypromise;

mypromise =  new Promise(
    function (resolve, reject) {
        ···
        resolve(value); // success
        mypromise = false;
    });
return mypromise;

}