【问题标题】:mongoose dynamic enum values猫鼬动态枚举值
【发布时间】:2017-06-26 23:14:05
【问题描述】:

我有如下的猫鼬模式。

'use strict';

var mongoose = require('mongoose'),
  Schema = mongoose.Schema;

var UserSchema = new Schema({
  role: {
    type: String,
    enum: ['user', 'admin']
  }
});

mongoose.model('User', UserSchema);

我想从数据库动态设置角色枚举值而不是硬编码,我该怎么做?

【问题讨论】:

  • 从数据库中获取值然后初始化你的架构?
  • 如果数据库中的数据发生变化怎么办?在服务器重新启动之前不会更新架构
  • 如果您的数据是动态的,那么我想您必须添加一个 pre 挂钩,该挂钩每次在执行实际查询之前都会从数据库中查询枚举。为了优化这一点,您可以使用 pub-sub 类型的模型,并且只要有新的枚举添加到数据库中,只需在本地更新您的枚举。这将防止每次在 pre 挂钩中查询数据库。
  • @Vishnu 你得到这个答案了吗?

标签: node.js mongoose enums mongoose-schema


【解决方案1】:

在您的字段中使用“验证”。例如:

//My field is called "status" inside my schema. So "validate" will check if can pass or not.
status: { type: String, default: 'Abierta', validate: (v) => {
    return customEnum(v, 'Status');
}},

这是我的“customEnum”模块

// This is the collection where I store the data. I don't want to use only, status, so
// I made it dynamic, to choose what I want to retrieve.
const SingleValue = require('../models/SingleValue');

module.exports = async (v, type) => {
    return !!await SingleValue.findOne({ typeOf: type, deleted: false, value: v });
}

完全正常,我正在使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2015-08-27
    • 1970-01-01
    • 2011-07-08
    • 2023-02-15
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多