【问题标题】:Virtual methods to populate on mongoose 'init'在 mongoose 'init' 上填充的虚拟方法
【发布时间】:2018-10-20 19:34:53
【问题描述】:

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

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

我试图有能力在模型初始化中使用诸如“isFavourited:true”之类的帮助指针,而不是循环遍历结果并修饰这些值。

干杯

【问题讨论】:

    标签: node.js express mongoose mongoose-schema


    【解决方案1】:

    找到答案

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

    从 finds 返回时将在对象上渲染虚拟对象

    【讨论】:

    • 啊,那是你的问题。我的误解。
    • @RobertMoskal 您的回答帮助我找到了正确的解决方案,其中包含与您在上面发布的相同虚拟设置的异步模式扩展插件。谢谢!
    【解决方案2】:

    虚拟机肯定会开箱即用地为您做到这一点:

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

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 2018-05-20
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 2023-01-15
      • 2016-07-11
      • 2021-07-01
      相关资源
      最近更新 更多