【问题标题】:How to create an object for a specific user role in mongoose?如何在猫鼬中为特定用户角色创建对象?
【发布时间】:2020-12-28 13:36:27
【问题描述】:

大家好,我正在尝试构建一个 User Schema,它有一个像这样的 role 对象和一个 appointment 对象

new mongoose.Schema({
role: {
    type: String,
    enum: ["admin", "partner", "basic"],
    default: "basic",
  },
apponitments: {
    type: [
      {
        type: mongoose.Schema.Types.ObjectId,
        ref: "Appointment",
      },
    ],
    required: function () {
      return this.role === "partner";
    },
  }
})

我对这段代码的问题是,不管role 是什么,约会对象无论如何都会被创建。

我不希望这种行为有办法阻止它吗?

【问题讨论】:

  • 不清楚细节,能否详细解释一下,您当前的架构有什么问题并添加用例。
  • 目前为所有用户创建约会对象,例如,我期望具有管理员角色的用户不应该有约会对象

标签: node.js mongoose


【解决方案1】:
  • 当角色为admin时,将default属性设置为undefined,否则返回value
  • 当角色为admin时将required属性设置为true,否则需要false
new mongoose.Schema({
    role: {
        type: String,
        enum: ["admin", "partner", "basic"],
        default: "basic"
    },
    apponitments: {
        type: [
            {
                type: mongoose.Schema.Types.ObjectId,
                ref: "Appointment"
            }
        ],
        default: function () {
            return this.role === "admin" ? undefined : this.value;
        },
        required: function () {
            return this.role === "admin" ? false : true;
        }
    }
})

【讨论】:

  • 抱歉耽搁了,但这种方法无论如何都会创建对象
  • 我已经在 mongoose v5.10.11 中进行了测试,它运行良好。当角色为管理员时,它不会创建字段。
  • 哦,我有一个旧版本,刚刚更新的问题已解决!。谢谢朋友。
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 2022-10-07
  • 2017-01-24
  • 2020-10-19
  • 2018-11-30
  • 2016-03-09
  • 1970-01-01
  • 2016-12-13
相关资源
最近更新 更多