Невозможно обновить с $ или существует несколько $ - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь обновить всю коллекцию, чтобы установить значение в поле; кто может быть пустым или не существует.

Вот мой запрос:

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 of InsuranceAgreement.isBasedOnProduct.productVersion), чтобы пройти element ({isBasedOnProduct: null}) ",

Я не совсем понимаю сообщение об ошибке и что я сделал не так.

1 Ответ

0 голосов
/ 20 сентября 2018

Ошибка возникает, когда InsuranceAgreement.isBasedOnProduct равно нулю или не существует. Выдается ошибка, когда $set ссылается на нее. Как заявляет ИфтехарДани в комментарии, вы можете обойти это, используя это:

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

Но , если InsuranceAgreement не существует, вы по-прежнему получаете сообщение об ошибке:

"невозможно использовать деталь (InsuranceAgreement InsuranceAgreement.isBasedOnProduct) для прохождения элемента ({InsuranceAgreement: null})" "

Обрабатывать оба случая следующим образом:

{
  $set:{"InsuranceAgreement":{"isBasedOnProduct.productVersion":"1.0"}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...