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
statics
are 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:
Methods
are 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