在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/數(shù)據(jù)庫/ mongoose 的Virtual是什么?

mongoose 的Virtual是什么?

Virtual properties are document properties that you can get and set but that do not get persisted to MongoDB.

這句話看不是很懂。請不要翻譯,希望能用自己的話解釋,有例子更好。謝謝

回答
編輯回答
筱饞貓

大致意思就是,你可以用mongoose添加和設(shè)置虛擬屬性,但是這虛擬屬性的值不會保存到數(shù)據(jù)庫中。
比如,前臺傳到后臺一個參數(shù)name,代表用戶的名稱,但是數(shù)據(jù)庫保存的是兩個字段,姓和名,這就可以用虛擬屬性

// 數(shù)據(jù)庫中緩存的格式
var schema = new Schema({
    name: {
        first: { 'type': String },  
        last: { 'type': String },
      }
});

// 當(dāng)獲取該 schema 的fullname屬性時,將 schema 中的 name.first 和 name.last 拼接起來返回
var virtual = schema.virtual('fullname');
virtual.get(function () {
  return this.name.first + ' ' + this.name.last;
});
// 當(dāng)設(shè)置該schema的 fullname 屬性時,將設(shè)置的字以空格分開,分別賦值給 schema 中的 name.first 和 name.last 屬性
var virtual = schema.virtual('fullname');
virtual.set(function (v) {
  var parts = v.split(' ');
  this.name.first = parts[0];
  this.name.last = parts[1];
});

// 將該 schema 保存到數(shù)據(jù)庫中時,只會保存 name.first 和 name.last
// fullname屬性的值不會保存到數(shù)據(jù)庫中,這就是virtual

http://mongoosejs.com/docs/ap...

set 中的 function 的參數(shù) v,是設(shè)置虛擬屬性時的值.不保存到數(shù)據(jù)庫中,但是它也是有存在的意義的,比如,就像例子中的,在用戶看來,它只有一個名字,但是在數(shù)據(jù)庫中,是要保存姓和名,因為分為姓和名,我們后續(xù)可以對用戶做統(tǒng)計,姓張的多少人.(這也只是舉個例子).

再比如,訂單的狀態(tài),數(shù)據(jù)庫中保存的是0,1,2,3,4,5,6,7.但是在頁面上,顯示的是未支付,已付款,待發(fā)貨,已發(fā)貨,待收貨,已完成,待評價等.我們就可以設(shè)置一個虛擬屬性

var virtual = schema.virtual('statusName');
virtual.get(function () {
  switch(this.status){
     case 0: return '待發(fā)貨';
     case 1: return '待收獲';
     case 2: return '已完成';
     default: return '待支付';
  }
  return this.name.first + ' ' + this.name.last;
});
2018年2月7日 04:42