mongoose 的Virtual是什么?

发布于 2022-09-06 21:40:24 字数 161 浏览 8 评论 0

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

这句话看不是很懂。请不要翻译,希望能用自己的话解释,有例子更好。谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甲如呢乙后呢 2022-09-13 21:40:24

大致意思就是,你可以用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;
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文