Mongooseのvirtual
virtual・・・
データベースには保存していない仮想的なプロパティをスキーマに追加できる機能。
MongoDBに永続化(保存)されませんが、ドキュメント取得時には付与されるものになり
ます。
早速サンプルを見ていきます。
このように苗字や名前のプロパティが存在し、データベースに保存されています。
苗字と名前がセットになったフルネームのプロパティも使うことが多くなると考えられ
ます。そこでフルネームまで保存していたらキリがないですよね。
そんな時に使えるのが今回の「virtual」になります。
const personSchema = new mongoose.Schems({
first: String,
last: String
});
// スキーマを定義した後にvirtual関数を使い、仮想プロパティfullNameを定義
personSchema.virtual('fullName').get(function () {
return `${this.first} ${this.last}`;
})
//モデル作成
const Person = mongoose.model('Person', personSchema);
personのインスタンスから「fullName」が呼ばれたとき、「first」 と「last」を連結さ
せた値を返すようにできます。
そして、mongooseは「fullNameプロパティ」にアクセスする度に、getter関数を呼び出
します。(ゲットする意味)
// ドキュメント(Personインスタンス)を生成する
const person1 = new Person({
name: { first: 'Taro', last: 'Yamada' }
});
console.log(person1.fullName);
// Taro Yamada
また、setter関数というのもあります。
getの逆であり、データベースに存在しないプロパティに対して、あたかも存在するかの
ようにモデルのインスタンスにセットすることができる機能です。
virtualのsetterに関しても記載があります。確認してみてください。