仅当 Document 中不存在 providerId 时才更新提供者数组并增加计数

毗湿奴

我陷入了这样的境地。我有以下文件。

{
    "_id" : ObjectId("5ceba7c419b48423e452972a"),
    "userId" : ObjectId("5ceba7c419b48423e4529727"),
    "providers" : [ 
        "1689736266", 
        "1598763690", 
        "1528069614", 
        "1831364272", 
        "1548463045", 
        "1245301159", 
        "1386616399", 
        "1790775971", 
        "1629462130", 
        "1992169783"
    ],
    "countByType" : {
        "doctors" : 6,
        "labs" : 0,
        "hospitals" : 0,
        "imagingCenters" : 0,
        "other" : 4
    }
}

最初,我从弹性搜索中获取 providerArray,添加到 providers 数组并使用以下查询增加计数。

let updateProviderId = await userProviderCollection.update(
   regUserId, {
     $set:  {
       providers: combinedProviderArray,
       countByType: providerCountType
     }
});

其中combinedProviderArray 是提供者的组合数组。ProviderId 在生成新报告时创建。如果报告已经存在,则上述条件将起作用。但是当新报告出现时,我需要检查提供者数组并增加计数,如果不在数组中,否则什么都不做。我怎样才能做到这一点。

当带有 providerId 的报告已在数组中时,请参阅下面的代码。

// Searching for Providers in Elastic Search
   let searchForProviders = await esHelper.getProvidersById(combinedProviderArray, true);
   searchForProviders.forEach((getCategory) => {
     let prCategory = getCategory.category;
     prCategory.forEach((cat) => {

       // Combining categories
       categoryArray = categoryArray.concat(cat);
     });
   });

   let counts = {
     "doctor": 0,
     "laboratory": 0,
     "hospital": 0,
     "imagingcenter": 0,
     "other": 0
   };
   let x;
   categoryArray.forEach(function(x) {
     counts[x] = (counts[x] || 0)+1;
   });

   let providerCountType = {
     "doctors": counts.doctor,
     "labs": counts.laboratory,
     "hospitals": counts.hospital,
     "imagingCenters": counts.imagingcenter,
     "other": counts.other
   }


   // Updating npiId & category count
   userproviderData.getDataSource().connector.connect(async (err, db) => {
     let userProviderCollection = db.collection("UserProviders");
     let regUserId = { userId: userId};
     let updateProviderId = await userProviderCollection.update(
       regUserId, {
         $set:  {
           providers: combinedProviderArray,
           countByType: providerCountType
         }
       });
   });

请为此提供适当的解决方案。任何帮助将非常感激。我被困在如何将提供者添加到数组并据此增加计数。

沙克特

您可以使用$addToSet. 这具有将值添加到数组的效果,但前提是它尚未存在...

let updateProviderId = await userProviderCollection.update(
   regUserId, {
     $addToSet:  {
       providers: providerID
     }
});

至于计数,可以使用 $inc 类似地完成。

let updateProviderId = await userProviderCollection.update(
   regUserId, {
     $inc:  {
       "countByType.doctors": 1
     }
});

您可以轻松构建增量对象:

let $inc= {
  "countByType.doctors": counts.doctor,
  "countByType.labs": counts.laboratory,
  "countByType.hospitals": counts.hospital,
  "countByType.imagingCenters": counts.imagingcenter,
  "countByType.other": counts.other
}
let updateProviderId = await userProviderCollection.update(regUserId, {$inc});

如果您只是添加一个,并且想同时完成所有操作,则可以只添加前两个示例:

let $inc = {};
$inc["countByType."+categoryName] =  1;
let updateProviderId = await userProviderCollection.update(
   regUserId, {
     $addToSet:  {
       providers: providerID
     },
     $inc
});

但即使提供者已经存在,它也会增加计数......所以你需要检查 $addToSet 是否有效,然后进行增加:

let updateProviderId = await userProviderCollection.update(
   regUserId, {
     $addToSet:  {
       providers: providerID
     }
});
if(updateProviderId["nMatched"] === 1 //A document was matched
    && updateProviderId["nModified"] === 1 //A document was modified
){
    let updateProviderCount = await userProviderCollection.update(regUserId, {$inc});
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅当新的 providerId 不存在时才更新 MongoDB 字段值

来自分类Dev

仅当doc不存在时,Elasticsearch中的批量索引

来自分类Dev

仅当表中不存在该值时才更新SQL列

来自分类Dev

仅当特定列中不存在值时才更新表

来自分类Dev

仅当队列中不存在项目时才将其添加到队列中

来自分类Dev

仅当表 B 中不存在特定值时才从表 A 中获取值

来自分类Dev

仅当值不存在时才从SELECT插入表中

来自分类Dev

仅当列中不存在值时才尝试执行SQL命令

来自分类Dev

仅当使用MySQL的值不存在时才如何从表中插入值?

来自分类Dev

仅当一个表中的数据不存在时才将其插入

来自分类Dev

仅当文件不存在时,才在用户给定的路径中创建文件

来自分类Dev

仅当 oracle sql 中不存在值时才插入

来自分类Dev

仅当值不存在时才返回行

来自分类Dev

SQL-仅当B不存在时才选择A

来自分类Dev

仅当记录不存在时才插入表

来自分类Dev

仅当其他列中不存在值时更新列

来自分类Dev

仅当neo4j中不存在节点时如何创建新节点

来自分类Dev

使用preg_replace时,如果$ 2不存在,则仅使用$ 1(在替换项中)

来自分类Dev

仅当MongoDB中不存在新文档时如何插入

来自分类Dev

如何使用 Ansible 在文件中添加条目(仅当它不存在时)

来自分类Dev

仅当其他表中不存在数据时,SQL 才从该表中获取数据

来自分类Dev

在VBA(单词)中,仅当不存在任何注释时,才如何向范围添加注释?

来自分类Dev

仅当不存在记录时,才通过存储过程从TVP列表中插入项目-性能降低

来自分类Dev

仅当数组不存在时才推送到该数组

来自分类Dev

仅当扩展不存在时,如何启用它?

来自分类Dev

仅当文件不存在时Ansible模板

来自分类Dev

仅当图像不存在时如何下载图像?

来自分类Dev

仅当不存在MongoDB文档字段时,才如何更新它们?

来自分类Dev

仅当元素不存在时才将元素添加到C数组

Related 相关文章

  1. 1

    仅当新的 providerId 不存在时才更新 MongoDB 字段值

  2. 2

    仅当doc不存在时,Elasticsearch中的批量索引

  3. 3

    仅当表中不存在该值时才更新SQL列

  4. 4

    仅当特定列中不存在值时才更新表

  5. 5

    仅当队列中不存在项目时才将其添加到队列中

  6. 6

    仅当表 B 中不存在特定值时才从表 A 中获取值

  7. 7

    仅当值不存在时才从SELECT插入表中

  8. 8

    仅当列中不存在值时才尝试执行SQL命令

  9. 9

    仅当使用MySQL的值不存在时才如何从表中插入值?

  10. 10

    仅当一个表中的数据不存在时才将其插入

  11. 11

    仅当文件不存在时,才在用户给定的路径中创建文件

  12. 12

    仅当 oracle sql 中不存在值时才插入

  13. 13

    仅当值不存在时才返回行

  14. 14

    SQL-仅当B不存在时才选择A

  15. 15

    仅当记录不存在时才插入表

  16. 16

    仅当其他列中不存在值时更新列

  17. 17

    仅当neo4j中不存在节点时如何创建新节点

  18. 18

    使用preg_replace时,如果$ 2不存在,则仅使用$ 1(在替换项中)

  19. 19

    仅当MongoDB中不存在新文档时如何插入

  20. 20

    如何使用 Ansible 在文件中添加条目(仅当它不存在时)

  21. 21

    仅当其他表中不存在数据时,SQL 才从该表中获取数据

  22. 22

    在VBA(单词)中,仅当不存在任何注释时,才如何向范围添加注释?

  23. 23

    仅当不存在记录时,才通过存储过程从TVP列表中插入项目-性能降低

  24. 24

    仅当数组不存在时才推送到该数组

  25. 25

    仅当扩展不存在时,如何启用它?

  26. 26

    仅当文件不存在时Ansible模板

  27. 27

    仅当图像不存在时如何下载图像?

  28. 28

    仅当不存在MongoDB文档字段时,才如何更新它们?

  29. 29

    仅当元素不存在时才将元素添加到C数组

热门标签

归档