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);
};