关于mongoose中使用 virtual 属性的问题
按着官网的例子写:
var PersonSchema = new Schema({
name: {
first: String,
last: String
},
state: Number,
tel: String,
statename: { type: String, default: '' }
});
PersonSchema.virtual('name.full').get(function() {
return this.name.first + ' ' + this.name.last;
});
PersonSchema.virtual('state_name').get(function() {
return _.result(_.find(dict.state, { 'value': this.state }), 'name');
});
但是如果把第二个虚拟属性state_name改为state.name就会提示 PersonSchema.virtual(…).get is not a function 如果像 name 一样是一个{} 类型就可以使用. 如果是单一String number等类型使用.就会报错。
还有一个问题: 就是使用
Person.find().select('name state +stateName')
按官网说是可以增加一个属性 stateName 的,可以是怎样也无法查看
6 回复
state原表里的字段,虚拟的属性不能给原表的属性进行处理的,即使name这样的plain old obj可以,也不应该这样做 ,应该保持它已有的内容不变。
后面的问题,stateName的get方法设置了么?
@i5ting 感谢大神的回复,我想加一个虚拟字段是因为这个state保存的是 数字或者是一个状态码,然后想做一个 statename的虚拟属性显示这些的中文注解。
后面的 stateName 要在 schema 里设置?
@alexyhe 不知道我理解错没错,你是想用“码表”对么?
@i5ting 恩,有些叫数据字典表
@alexyhe 那你知道其他语言里怎么实现么?node里也是一样的
@i5ting 谢谢你的回答了,虽然那个,但是我自己实现了