sql >> Base de Datos >  >> NoSQL >> MongoDB

Métodos 'estáticos' de Mongoose frente a métodos de 'instancia'

statics son los métodos definidos en el Modelo. methods se definen en el documento (instancia).

Puede usar una estática método como Animal.findByName :

const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }

Y podría usar un método de instancia como fido.findSimilarTypes :

const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]

Pero no harías Animals.findSimilarTypes() porque Animals es un modelo, no tiene "tipo". findSimilarTypes necesita un this.type que no existiría en el modelo Animals, solo una instancia de documento contendría esa propiedad, tal como se define en el modelo.

Del mismo modo, no harías¹ fido.findByName porque findByName tendría que buscar en todos los documentos y fido es solo a documento.

¹Bueno, técnicamente puedes , porque la instancia tiene acceso a la colección (this.constructor o this.model('Animal') ) pero no tendría sentido (al menos en este caso) tener un método de instancia que no use ninguna propiedad de la instancia. (gracias a @AaronDufour por señalar esto)