Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 仅当新providerId不存在时更新MongoDB字段值_Node.js_Mongodb_Mongodb Query_Aggregation Framework_Mongo Collection - Fatal编程技术网

Node.js 仅当新providerId不存在时更新MongoDB字段值

Node.js 仅当新providerId不存在时更新MongoDB字段值,node.js,mongodb,mongodb-query,aggregation-framework,mongo-collection,Node.js,Mongodb,Mongodb Query,Aggregation Framework,Mongo Collection,我在MongoDB中有以下文档 { "_id" : ObjectId("5ce34ac6a2f25b2448b9b3a3"), "userId" : ObjectId("5ce34ac6a2f25b2448b9b3a0"), "providers" : [ "1689736266", "1598763690", "1528069614", "1831364272", "1548463

我在MongoDB中有以下文档

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

我不知道如何在providers数组中检查新的providerId,如果不存在,则通过单个查询操作进行更新。因此,首先我需要检查特定providerId是否存在,如果不存在,则更新providers字段,否则忽略它


如何实现这一点?

我想您需要的是操作员。您可以添加多个值,而无需担心添加重复项,如下所示:

db.test.update(
 {userId : ObjectId("5ce34ac6a2f25b2448b9b3a0")},
 {$addToSet  : {providers : { $each:["1","1689736266", "23"]} }}
)

我想你需要的是接线员。您可以添加多个值,而无需担心添加重复项,如下所示:

db.test.update(
 {userId : ObjectId("5ce34ac6a2f25b2448b9b3a0")},
 {$addToSet  : {providers : { $each:["1","1689736266", "23"]} }}
)

根据文档,“除非值已经存在,否则$addToSet运算符会将值添加到数组中,在这种情况下,$addToSet不会对该数组执行任何操作。”。当您试图在提供程序数组中同时添加多个值时,也会出现这种情况吗?。如果使用$eather,则不需要$each。

根据文档“除非值已经存在,否则$addToSet运算符会将值添加到数组中,在这种情况下,$addToSet不会对该数组执行任何操作。”。当您试图在提供程序数组中同时添加多个值时,也会出现这种情况吗?。如果您使用$each,您将不需要$each。

“如果不存在,则更新“提供程序”字段,否则忽略它。”-您能否澄清该部分?如果该值不存在,是否要推送该值?或者是否要执行其他操作?@mickl Yes如果该值不存在,我想将提供程序id推送到数组中,以便将其添加到现有数组的末尾…“如果不存在,则更新提供程序字段,否则忽略它。”-您能否澄清该部分?如果该值不存在,是否要推送该值?或者是否要执行其他操作?@mickl Yes如果该值不存在,我想将提供程序id推送到数组中,以便将其添加到现有数组的末尾……有一个疑问,我已经使用以下查询来更新提供程序和计数:让updateProviderId=Wait userProviderCollection.update(regUserId,{$set:{providers:providernpiId,countByType:providercountType}});其中providernpiId是完整数组,而不是单个元素这会覆盖现有数组吗?不会。它只是附加到现有数组。我怀疑我已经使用了以下查询来更新提供程序和计数:let updateProviderId=await userProviderCollection.update(regUserId,{$set:{providers:providernpiId,countByType:providercountType}});其中providernpiId是完整数组,而不是单个元素这会覆盖现有数组吗?不会。它只是附加到现有数组。我已经在数组中有一些值,我将其更新为整个数组。在这种情况下,我需要检查数组中是否存在一些数组值,而不是单个值,而是单个数组。因此,在这种情况下,我应该选择哪一个。在这种情况下,您应该使用$addToSet和$each选项。与@bajal的回答相同。因此$each将检查新数组中的每个值,$addToSet检查该值是否存在于提供程序中,如果不插入,则不执行任何操作。我在数组中已经有一些值,我将其更新为整个数组。在这种情况下,我有一些数组值需要检查数组中是否存在,not单个值,但作为单个数组。因此,在这种情况下,我应该选择哪一个。在这种情况下,您应该使用$addToSet和$each选项。与@bajal的回答相同。因此$each将检查新数组中的每个值,$addToSet检查该值是否存在于提供程序中,如果不插入,则不执行任何操作。