关于mongoose中使用 virtual 属性的问题
发布于 8 年前 作者 alexyhe 6321 次浏览 来自 问答

按着官网的例子写:

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 谢谢你的回答了,虽然那个,但是我自己实现了

回到顶部