仅在不存在新providerId的情况下更新MongoDB字段值

时间:2019-05-24 13:53:48

标签: node.js mongodb mongodb-query aggregation-framework mongo-collection

我在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
    }
}

我不确定如何在provider数组中检查新的providerId以及如何更新(如果不存在)通过单个查询操作。因此,首先我需要检查特定的providerId是否存在,如果不存在,则更新provider字段,否则将其忽略。

我该如何实现?

2 个答案:

答案 0 :(得分:1)

我认为您需要的是$addToSet运算符。您可以添加多个值,而不必担心像这样添加重复项:

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

答案 1 :(得分:1)

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