(18)被迫吃芒果的前端工程師 - Mongoose 之 Static methods

前言

接下來講一個跟 Instance methods 很像的 Static methods,但 Static methods 其實跟 Instance methods 是不同的東西唷。

Static methods

為什麼會說 Static methods 跟 Instance methods 很像呢?因為寫法非常像,例如輸出全部使用者的年齡

1
2
3
userSchema.statics.getUserAge = function() {
return this.find({}).then((data) => data.map((item) => item.age));
}

接下來只需要這樣用就可以了

1
2
3
User.getUserAge().then((age) => {
console.log('age', age)
})

那這邊回來看一下 Instance methods 寫法

1
2
3
userSchema.methods.getBirthYear = function() {
return new Date().getFullYear() - this.age;
}

可以發現 Static methods 跟 Instance methods 真的很像,但是這邊有一個重點

「Instance methods 是基於 Schema 下運作與使用」

因此在 Instance methods 中,我們是這樣用

1
2
3
4
User.findOne({nickname: 'RayXu'}).then((data) => {
console.log('data', data);
console.log('getBirthYear', data.getBirthYear());
})

但 Static methods 則是基於 Model 因此類似包裝成自己的一種 find

1
2
3
User.getUserAge().then((age) => {
console.log('age', age)
})

這個就是最簡單的 Static methods 跟 Instance methods 差異。