【发布时间】:2018-10-20 19:34:53
【问题描述】:
我正在寻找一种将虚拟(或类似的东西)填充到猫鼬模型的方法。
我有一个模型,我希望它具有非持久属性。
我试图有能力在模型初始化中使用诸如“isFavourited:true”之类的帮助指针,而不是循环遍历结果并修饰这些值。
干杯
【问题讨论】:
标签: node.js express mongoose mongoose-schema
我正在寻找一种将虚拟(或类似的东西)填充到猫鼬模型的方法。
我有一个模型,我希望它具有非持久属性。
我试图有能力在模型初始化中使用诸如“isFavourited:true”之类的帮助指针,而不是循环遍历结果并修饰这些值。
干杯
【问题讨论】:
标签: node.js express mongoose mongoose-schema
找到答案
Schema.set("toObject", { virtuals: true }); Schema.set("toJSON", { virtuals: true });
从 finds 返回时将在对象上渲染虚拟对象
【讨论】:
虚拟机肯定会开箱即用地为您做到这一点:
someSchema.virtual('isFavourited').get(function() {
return true
})
它会为您提供一个无法设置的临时 isFavorited 属性。
您可能希望在模型上获得任意瞬态属性是一个看起来像这样的插件:
function IHaveContext(schema, init={}) {
schema.virtual('context')
.get(function () {
return this._context;
})
.set(function (item) {
if (!this._context)
this._context = init;
this._context = Object.assign({}, this._context, item);
});
}
然后将其应用于任何模型,可选择设置默认值:
let Game = new Schema({ ... })
Game.plugin(IHaveContext, {'isFavourited': false})
现在你有一个 api 可以用任意属性装饰你的模型:
let item - new Game()
item.set('context', {'isFavourited': true});
item.get('context')('isFavourited');
【讨论】: