Nội dung bài viết
Video học lập trình mỗi ngày
Mongoose statics vs methods chắc hẳn những ai bước vào tìm hiểu NoSQL cụ thể là Mongodb thì đã từng nghe qua về hai khái niệm đó. Và hơn nữa đó là virtual và middleware trong mongoose. Trong bài viết này chúng ta hãy đi tìm hiểu và áp dụng những khái niệm đó.
Và tôi nhắc lại nếu như bạn là người mới đến blog của Tips Javascript thì đây là một bài viết nằm trong Series - DESIGNING AN E-COMMERCE WEBSITE ALICONCON và đây là post thứ 2.
Nếu như bạn là đã hiểu một chút về những khái niệm trên thì có thể nâng cao hơn với việc xem video về Statics methods virtual in mongoose - node.js. Hoặc video ở đầu bài viết này.
Statics mongoose
staticsare the methods defined on the Model
Statics mongoose là giống methods nhưng bạn được sử dụng trực tiếp mà không cần instance Model trong mongoose. Ví dụ:
var AnimalSchema = mongoose.Schema({
name: String,
type: String,
hasTail: Boolean
})
AnimalSchema.statics.findAnimalsWithATail = function (cb) {
Animal.find({ hasTail: true }, cb);
};
Chúng ta sẽ sử dụng như sau ở file animal.services như sau:
const Animal = require('AnimalSchema_Model')
//use statics
Animal.findAnimalsWithATail()
Methods Mongoose
Tương tự với Statics thì methods được định nghĩa như sau:
Methodsare defined on the document (instance)
Điều đó có nghĩa bạn muốn sử dụng methods mongoose thì bạn phải instance của model đó. Ví dụ:
var AnimalSchema = mongoose.Schema({
name: String,
type: String,
hasTail: Boolean
})
AnimalSchema.methods.findByType = function (cb) {
return this.model('Animal').find({ type: this.type }, cb);
}
Chúng ta sẽ sử dụng như sau ở file animal.services như sau:
const Animal = require('AnimalSchema_Model')
const _Animal = new Animal() // instance model
//use methods
_Animal.findByType()
Virtual Mongoose
Trong Mongoose có hỗ trợ các Virtual attributes. Virtual attributes là các thuộc tính hỗ trợ khi làm việc với statics và methods nhưng không được lưu giữ trong Model của Mongoose.
Một ví dụ rất hữu ích.
var AnimalSchema = mongoose.Schema({
name: String,
type: String,
hasTail: Boolean
})
AnimalSchema.virtual('getTime').get(function () {
return Date.now();
})
// use in statics
AnimalSchema.statics.findAnimalsWithATail = function (cb) {
const time = this.getTime; // use Virtual
Animal.find({ hasTail: true }, cb);
};
Khi nào nên sử dụng.
Để có cái nhìn cụ thể, bạn nên xem video: Statics methods virtual in mongoose - node.js

