mongoose 的Virtual是什么？
Virtual properties are document properties that you can get and set but that do not get persisted to MongoDB. 
这句话看不是很懂。请不要翻译，希望能用自己的话解释，有例子更好。谢谢
user
mongoose 的Virtual是什么？
Virtual properties are document properties that you can get and set but that do not get persisted to MongoDB. 
这句话看不是很懂。请不要翻译，希望能用自己的话解释，有例子更好。谢谢
assistant
大致意思就是，你可以用mongoose添加和设置虚拟属性，但是这虚拟属性的值不会保存到数据库中。
比如，前台传到后台一个参数name，代表用户的名称，但是数据库保存的是两个字段，姓和名，这就可以用虚拟属性
```
// 数据库中缓存的格式
var schema = new Schema({
    name: {
        first: { 'type': String },  
        last: { 'type': String },
      }
});

// 当获取该 schema 的fullname属性时,将 schema 中的 name.first 和 name.last 拼接起来返回
var virtual = schema.virtual('fullname');
virtual.get(function () {
  return this.name.first + ' ' + this.name.last;
});
// 当设置该schema的 fullname 属性时,将设置的字以空格分开,分别赋值给 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 保存到数据库中时,只会保存 name.first 和 name.last
// fullname属性的值不会保存到数据库中,这就是virtual

```
http://mongoosejs.com/docs/ap...
set 中的 function 的参数 v,是设置虚拟属性时的值.不保存到数据库中,但是它也是有存在的意义的,比如,就像例子中的,在用户看来,它只有一个名字,但是在数据库中,是要保存姓和名,因为分为姓和名,我们后续可以对用户做统计,姓张的多少人.(这也只是举个例子).
再比如,订单的状态,数据库中保存的是0,1,2,3,4,5,6,7.但是在页面上,显示的是未支付,已付款,待发货,已发货,待收货,已完成,待评价等.我们就可以设置一个虚拟属性
```
var virtual = schema.virtual('statusName');
virtual.get(function () {
  switch(this.status){
     case 0: return '待发货';
     case 1: return '待收获';
     case 2: return '已完成';
     default: return '待支付';
  }
  return this.name.first + ' ' + this.name.last;
});
```