$mul вложенное поле документа, где может не быть

У меня есть следующий документ:

{
    "results" : [ 
        {
            "name" : "foo",
            "score" : 10
        }, 
        {
            "name" : "bar"
        }
    ]
}

Я хочу умножить score поле по 10Только там, где это существует.

Используя только точечную запись:

{
    $mul: {
        'results.score': NumberInt(10)
    }
}

Возвращает ошибку:

Cannot create field 'score' in element {results: [ { name: "foo", score: 10 }, { name: "bar" } ]}

Я пытался использовать новые фильтры массива:

{
    $mul: {
        'results.$[result].score': NumberInt(10)
    }
}, {
    arrayFilters: [{
        'result.grade': {
            $exists: true
        }
    }]
}

Это также дает мне ошибку:

No array filter found for identifier 'result' in path 'results.$[result].score'

Я знаю, что я мог бы установить поле оценки во всех документах и ​​установить его на ноль, но это не было бы решением, так как отсутствие оценки означает, что оценки еще нет, а есть оценка и его 0,

  1. Можно ли это сделать?
  2. Можно ли это сделать до версии 3.6?

0 ответов

Другие вопросы по тегам