在mongoose'init'上填充的虚拟方法

时间:2018-05-10 13:47:42

标签: node.js express mongoose mongoose-schema

我正在寻找一种方法来将虚拟(或类似的东西)填充到猫鼬模型中。

我有一个模型,我希望有非持久性属性。

我试图在模型init上有帮助指针,例如'isFavourited:true',而不是循环遍历结果并装饰这些值。

干杯

2 个答案:

答案 0 :(得分:1)

找到答案

Schema.set(" toObject",{virtuals:true}); Schema.set(" toJSON",{virtuals:true});

从find

返回时,

将呈现对象上的虚拟对象

答案 1 :(得分:0)

Virtuals肯定会为您提供开箱即用的功能:

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');