Нотация Mongodb не обновляет массив - PullRequest
0 голосов
/ 25 сентября 2019

У меня проблема с точечной нотацией mongodb для массивов.

В массиве 'base' в пользовательском объекте есть набор баз, которые я пытаюсь обновить с помощью точечной нотации.Чтобы еще больше усложнить ситуацию, я помещаю обновления в массив функций и вызываю их с помощью библиотеки Async.

//NOTE: baseIndex, baseData, dbCollection and baseOwner are considered defined already.
let updateArray = []
let thisUpdateObject = {}
thisUpdateObject['$set'] = {}
thisUpdateObject['$set']['bases.'+baseIndex] = baseData
let thisUpdate = function(callback){
    dbCollection.update({'id':baseOwner},thisUpdateObject,function(err, result){
        if (err){
            callback(err)
        } else {
            callback(null, result);
        }
    });
}
updateArray.push(thisUpdate)
async.parallel(updateArray,function(err, results){
            if...

Мой результат говорит о следующем:

n: 0,
nModified: 0,
ok: 1 }

I 'мы проверили, что в документе существует массив base, который соответствует 'id': baseOwner.Нулевой элемент существует в массиве (что не должно иметь значения, но он уже существует.)

Когда я вставляю свое обновление в консоль, я получаю следующее:

'$set': { 'bases.0': { *contains correct object*}}

Наконец,Я знаю, что асинхронная система обновлений работает, потому что в случаях, когда точечная запись не включена, обновление IS корректно изменяет документы.

Я предполагаю, что что-то не так с моей точечной нотацией, ноЯ не вижу, что.

Я делаю какие-либо очевидные ошибки?

1 Ответ

1 голос
/ 25 сентября 2019

Краткое обсуждение в комментариях дало простой ответ:

Результат n: 0 указывает на то, что ни один документ не соответствует запросу на обновление.Виновником было неверное значение id, содержащееся в переменной baseOwner.

...