【问题标题】:How to get enum values from mongoose schema using virtual method?如何使用虚拟方法从猫鼬模式中获取枚举值?
【发布时间】:2016-09-13 23:41:50
【问题描述】:

我在使用同一架构上的虚拟方法从我的 Mongoose 架构中获取枚举值时遇到了困难。

我试图在架构中访问的属性定义如下:

, roles: {
    type: [{
        type: String
        , enum: ['user', 'admin']
    }]
    , default: ['user']
}

以下是我用来获取枚举值的虚拟方法:

// Returns an array of all possible role enum values
UserSchema.virtual('possibleRoles').get(function() {
    return this.schema.path('roles').caster.enumValues;
});

这可行,但是我在网上找到的其他示例以不同的方式进行。一个例子在这里:Access the list of valid values for an Enum field in a Mongoose.js Schema

我访问属性上的枚举的方法是脏的还是不正确的?有没有更简洁的方法可以写这个?

【问题讨论】:

    标签: node.js mongodb enums mongoose


    【解决方案1】:

    移除脚轮部分,我不知道为什么会这样: return this.schema.path('roles').enumValues; 应该可以正常工作,没有任何其他问题

    【讨论】:

      【解决方案2】:

      这是干净且简单的方法。

      var possibleRoles = ['user', 'admin'];
      
      var UserSchema = new Schema({
          roles: {
              type: [{type: String, enum: possibleRoles}],
              default: ['user']
          }
      });
      
      UserSchema.virtual('possibleRoles').get(function () {
          return possibleRoles;
      });
      

      【讨论】:

      • 这是最干净的方式。但是,如果我想将数组保留在架构定义中,我访问它的方式是否正确?谢谢。
      • 您可以在角色类型为字符串时访问并为其设置枚举值。然后在虚方法中返回 this.schema.path('roles').enumValues;
      猜你喜欢
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 2017-06-26
      • 2017-11-01
      • 2021-04-03
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      相关资源
      最近更新 更多