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?
ModelObj.findById(IdValue).exec(callback);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);
};