Node.js 仅当新providerId不存在时更新MongoDB字段值
我在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
{
"_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检查该值是否存在于提供程序中,如果不插入,则不执行任何操作。