仅当 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

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

来自分类Dev

仅当值不存在时才返回行

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

仅当文件不存在时Ansible模板

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

    仅当值不存在时才返回行

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

    仅当文件不存在时Ansible模板

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档