我尝试更新整个集合以在字段中设置一个值;谁可以为空或不存在。
这是我的要求:
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})”,
我不完全理解错误消息以及我做错了什么。
答案 0 :(得分:1)
当 InsuranceAgreement.isBasedOnProduct 为null或不存在时,将发生错误。当$set
引用错误时,将引发错误。正如IftekharDani在评论中指出的那样,您可以使用以下方法解决该问题:
{
$set:{"InsuranceAgreement.isBasedOnProduct":{"productVersion":"1.0"}
}
但是,如果 InsuranceAgreement 不存在,您仍然会收到错误消息:
“不能使用部分(InsuranceAgreement.isBasedOnProduct)来遍历元素({InsuranceAgreement:null})”
使用以下两种方法处理这两种情况:
{
$set:{"InsuranceAgreement":{"isBasedOnProduct.productVersion":"1.0"}
}