FindOne с последующим обновлением, используя один запрос - PullRequest
0 голосов
/ 26 февраля 2019

Используя метод "findOne" драйвера mongoDb ( no mongoose ), могу ли я использовать полученный документ для его обновления позже?

Например:

document.collection('myCollection').findOne({ _id: myId }, (err, foundDoc) => {
  // **I need to do some multiple checks in between**, so I don't want to use "findOneAndUpdate()"
  // foundDoc is the retrieved document. Can I use it directly for update? (something like "foundDoc.update()")
  document.collection('myCollection').updateOne({ _id: myId }, { $set: { name: 'John' } });
});

Как вы можете видеть, я в основном делаю второй запрос, используя метод "updateOne" (сначала он ищет документ, а затем обновляет его).Можно ли как-то избежать этого и использовать foundDoc напрямую для обновления?

1 Ответ

0 голосов
/ 26 февраля 2019

Если вы хотите обновить тот же документ, вам не нужно вызывать .findOne(), а затем метод .updateOne().По умолчанию параметр upsert имеет значение false в .upadateOne(), поэтому он откажется вставить документ, если не найден, иначе он обновится.

 document.collection('myCollection').updateOne({ _id: myId }, { $set: { name: 'John' } });

.updateOne должно быть достаточно в вашем случае.

Также, если вы хотите добавить некоторые условия фильтра, .updateOne() поддерживает это, как показано ниже:

db.collection.updateOne(
   <filter>,   // you can place filters here
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)

Ссылка: https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/

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