В чем разница между Model.findOne() и Model.findById() в Mongoose?

Рассмотрим, что мы ищем документ из MongoDB на основе значения _id. Какой из следующих кодов эффективен?

  • ModelObj.findById(IdValue).exec(callback);

  • ModelObj.findOne({ '_id': IdValue}).exec(callback);

Я чувствую, что ModelObj.findById() эффективен, но каковы благоприятные причины или как это эффективно?

Ответы

Ответ 1

findById - это просто удобная функция, которая делает то же самое, что и вызов findOne, который вы показываете.

Здесь источник:

Model.findById = function findById (id, fields, options, callback) {
  return this.findOne({ _id: id }, fields, options, callback);
};

Ответ 2

Использование .findOne заставляет базу данных просматривать свои записи, проверяя каждый документ bson, чтобы найти соответствующую переменную, а затем проверить значение, если mongo знает, что он ищет внутренне проиндексированное поле _id, ему не нужно просматривать каждый документ