Разница между findOneAndDelete () и findOneAndRemove () - PullRequest
0 голосов
/ 30 мая 2018

Я не могу различить findOneAndDelete () И findOneAndRemove () в документации mongoose .

Query.prototype.findOneAndDelete ()

Эта функция немного отличается от Model.findOneAndRemove () тем, что findOneAndRemove () становится командой findAndModify () MongoDB, в отличие от команды findOneAndDelete ().Для большинства случаев использования мангусты это различие чисто педантичное. Вы должны использовать findOneAndDelete (), если у вас нет веских причин не делать этого.

Ответы [ 5 ]

0 голосов
/ 08 апреля 2019

Оба они почти одинаковы, за исключением того, что findOneAndRemove использует findAndModify с флагом удаления, а сложность по времени будет немного выше по сравнению с findOneAndDelete , потому что вы делаетеОбновить.Удалить всегда быстрее.

0 голосов
/ 02 апреля 2019

В собственном клиенте MongoDB (отличается Mongoose), передача { remove: true } в findAndModify заставляет его удалить найденный документ, его поведение в этом случае будет выглядеть почти так же, как findOneAndDelete.Однако при использовании других параметров есть некоторые различия:

  • findAndModify принимает 5 параметров: query, sort, doc (объект обновления), options и callback. findOneAndDelete принимает только 3 (filter или запрос, options и callback)
  • options для findAndModify, включая w, wtimeoutи j для задач записи, таких как:

    «уровень подтверждения, запрошенный у MongoDB для операций записи в автономный mongod или для наборов реплик или в сегментированные кластеры.» или просто уровни гарантии, доступные длясообщение об успешном выполнении операции записи.

    options для findOneAndDelete не включает конфигурацию задач записи.

  • findAndModify позволяет вернутьновый документ и удалите его одновременно.

Пример:

// Simple findAndModify command returning the new document and
  // removing it at the same time
  collection.findAndModify({b:1}, [['b', 1]], {$set:{deleted: Date()}}, {remove:true}, calback)
0 голосов
/ 30 ноября 2018

Я бы посоветовал вам использовать findOneAndDelete ().Mongoose предоставляет как функции для обработки данных с помощью ORM, так и функции для записи непосредственно в базу данных, причем одна из последних - findOneAndDelete ().Прямая запись в базу данных более опасна, так как вы рискуете не вызывать промежуточное программное обеспечение или средства проверки, потенциально передавая частичные или неполные данные в базу данных.Обратите внимание, что я сказал, что это больше опасно, а не то, что оно совершенно опасно, findOneAndDelete () просто проходит через ORM, добавляя безопасность.

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

findOneAndRemove возвращает удаленный документ, поэтому, если вы удаляете документ, который, по вашему решению, не должен быть удален, вы можете вставить его обратно в базу данных.Прежде чем удалять документ, убедитесь, что ваша логика исправна, а затем проверяет IMO.

findOneAndDelete имеет параметр sort, который можно использовать для определения того, какой документ обновляется.У этого также есть параметр TimeLimit, который может управлять, в пределах которого операция должна завершиться

0 голосов
/ 25 ноября 2018

В mongoose findOneAndDelete работает так же, как findOneAndRemove.Они оба смотрят объект по его свойствам в JSON, затем удаляют его и возвращают объект один раз после удаления.Когда вы используете собственный mongodb в качестве базы данных, findOneAndDelete может быть вам полезен, но в случае с mongoose он устарел, я могу посоветовать вам использовать findOneAndDelete для выполнения ваших операций на основе последней конфигурации mongoose и nodejs, действовавшей на данный момент.https://github.com/Automattic/mongoose/issues/6880

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