one findbyidandupdate example delete all node.js mongodb mongoose objectid

node.js - findbyidandupdate - ¿Cuál es la diferencia entre Model.findOne() y Model.findById() en Mongoose?



mongoose limit (4)

El uso de .findOne hace que la base de datos busque en sus registros y verifique cada documento bson para encontrar la variable relevante y luego verifique el valor, si Mongo sabe que está buscando el campo _id indexado internamente, no tiene que revisar cada documento

Considere que estamos buscando un documento de MongoDB basado en el valor _id. ¿Cuál de los siguientes códigos es eficiente?

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

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

Siento que ModelObj.findById () es eficiente, pero ¿cuáles son las razones de apoyo o cómo es eficiente?


findById (id) es solo el azúcar sintáctico de find ({_ id: id}) o findOne ({_ id: id})


findById(id) es casi equivalente a findOne({ _id: id }) .
Si desea consultar por el _id de un documento, use findById() lugar de findOne() .

Ambas funciones activan findOne() , la única diferencia es la forma en que tratan el undefined .
Si usa findOne() , verá que findOne(undefined) y findOne({ _id: undefined }) son equivalentes a findOne({}) y devolver documentos arbitrarios.
Sin embargo, mongoose traduce findById(undefined) en findOne({ _id: null }) .

Consulte https://mongoosejs.com/docs/api.html#model_Model.findById

Aquí está la source :

Model.findById = function findById(id, projection, options, callback) { if (typeof id === ''undefined'') { id = null; } if (callback) { callback = this.$wrapCallback(callback); } return this.findOne({_id: id}, projection, options, callback); };


findById es solo una función de conveniencia que hace exactamente lo mismo que la llamada findOne usted muestra.

Aquí está la fuente :

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