无法使用$ or或多个$ exists更新

时间:2018-09-17 08:18:34

标签: mongodb mongoose mongodb-query

我尝试更新整个集合以在字段中设置一个值;谁可以为空或不存在。

这是我的要求:

db.noa_drafts.updateMany(
{
    $or : [
        {"InsuranceAgreement":{$exists:false}},
        {"InsuranceAgreement.isBasedOnProduct":{$exists:false}},
        {"InsuranceAgreement.isBasedOnProduct":null},
        {"InsuranceAgreement.isBasedOnProduct.productVersion":{$exists:false}},
        {"InsuranceAgreement.isBasedOnProduct.productVersion":null},
        {"InsuranceAgreement.isBasedOnProduct.productVersion":""}
    ]
},
{$set:{"InsuranceAgreement.isBasedOnProduct.productVersion":"1.0"}}
)

我收到以下错误消息:

  

“ errmsg”:“无法使用该部分(isBasedOnProduct的   InsuranceAgreement.isBasedOnProduct.productVersion)来遍历   元素({isBasedOnProduct:null})”,

我不完全理解错误消息以及我做错了什么。

1 个答案:

答案 0 :(得分:1)

InsuranceAgreement.isBasedOnProduct 为null或不存在时,将发生错误。当$set引用错误时,将引发错误。正如IftekharDani在评论中指出的那样,您可以使用以下方法解决该问题:

{
  $set:{"InsuranceAgreement.isBasedOnProduct":{"productVersion":"1.0"}
}

但是,如果 InsuranceAgreement 不存在,您仍然会收到错误消息:

  

“不能使用部分(InsuranceAgreement.isBasedOnProduct)来遍历元素({InsuranceAgreement:null})”

使用以下两种方法处理这两种情况:

{
  $set:{"InsuranceAgreement":{"isBasedOnProduct.productVersion":"1.0"}
}