Пн goose Document.set не сохраняется в фактическую БД - PullRequest
0 голосов
/ 27 мая 2020

Я делаю вручную upsert на Collection с JSON Array.

I l oop через массив и сначала нахожу совпадение. Если совпадение существует, я вызываю на нем set - в противном случае я insert в collection.

for (let obj of objs) {
    //check for match where 'foo' and 'bar' Objects match
    const match = await Model.findOne({foo:obj.foo, bar:obj.bar});

    if (match) {
        //show value b4 update
        console.log('b4 ', match.fizz);

        //If match, then update the 'fizz' field 
        match.set({fizz:obj.fizz});

        //This actually shows that the update happened
        console.log('after ', match.fizz);
    } else {
      //Otherwise, insert this new Object into the Collection
      await Model.insert(obj)
    }
 }

Проблема в том, что запись не обновляется в фактической БД, когда Я go в Пн go. Тем не менее, моя отладка показывает, что она была обновлена, что заставило меня поверить, что команда set «сработала». Странно то, что insert, похоже, работает, и я вижу в БД новый документ, а не обновленный. Есть идеи относительно того, что может происходить? Спасибо

Ответы [ 2 ]

1 голос
/ 27 мая 2020

document.set() не предназначен для сохранения документа в базе данных. Вы можете использовать document.set() для изменения локального документа, если вы хотите сохранить изменения в базе данных, используйте document.save()

match.set({ fizz: obj.fizz });
await match.save();

Совет: Вы можете использовать следующее для обновления документ, если ваш obj содержит только foo, bar, fizz и вы хотите обновить fizz

await Model.findOneAndUpdate(
  { foo: obj.foo, bar: obj.bar }, 
  { $set: { fizz: obj.fizz } },
  { upsert: true }
)
1 голос
/ 27 мая 2020

После выполнения оператора set выполнить оператор сохранения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...