DUPLICATES搜索查询太慢

时间:2019-05-17 14:14:49

标签: mongodb nosql aggregation nosql-aggregation

我想检查每种干预措施在两个日期之间的重复情况。 我们有一个数据库(MongoDB),其中包含一些与计划API相关的信息。该计划可确保家庭护理助理有自己的计划。

但是今天我们有一些重复的干预措施。

我正在从此使用帆和水线。

我找到了从开始日期到结束日期的所有干预措施,并检查每个干预措施是否在同一日期与同一家庭护理助手相关。 (检查重复项)

我是这样做的:

let conditionInter = {advPk: advPk, agency: agency, start: {">=": start}, end: {"<=": end}, eventType: 1}

    if(advPk == undefined) delete conditionInter.advPk;
    if(agency == undefined) delete conditionInter.agency;

    if(start == undefined || end == undefined) return res.send("Il manque la date de début et/ou la date de fin.");


      let interventions = await Intervention.find(conditionInter);
      let nbr = interventions.length;

      process.stdout.write(`Detecting duplicates on ${interventions.length} interventions `);

      for(intervention of interventions) {

        process.stdout.write(`\r${nbr} interventions to check        `);
        nbr --;

        if(advPk == undefined) advPk = intervention.advPk;
        let startIntervention = intervention.start;
        let endIntervention = intervention.end;

        let condition = {
          advPk: advPk, 
          eventType: 1,
          or: [{
            and: [{
              start: {">=": startIntervention}
            }, {
              start: {"<": endIntervention}
            }]
          },{ 
            and: [{
              end: {">": startIntervention}
            }, {
              end: {"<=": endIntervention}
            }]
          }]
        }

        let interventionsDuplicate = await Intervention.find(condition);

        if(interventionsDuplicate.length > 1) {
          // LOGS...
        }
    }

它可以工作,但是确实很慢,大约一个秒一次地检查每个干预。我不是Aggregation等的专业人士。所以我想知道如何正确地检查重复项。谢谢

0 个答案:

没有答案