【问题标题】:Mongoose Schema enum validation on array of strings字符串数组上的 Mongoose Schema 枚举验证
【发布时间】:2019-09-25 01:09:19
【问题描述】:

枚举验证在它是单个字符串时有效:

var songSchema = new Schema({
    vocalRange: {
        type: String,
        enum: ["Soprano", "Mezzo-soprano", "Contralto", "Alto", "Tenor", "Baritone", "Bass"],
    }
})

尝试发布除枚举中的内容之外的任何内容都会通过 mongoose 返回验证错误。

但是,以下内容:

var songSchema = new Schema({
    vocalRange: {
        type: [String],  // this is what changed
        enum: ["Soprano", "Mezzo-soprano", "Contralto", "Alto", "Tenor", "Baritone", "Bass"],
    }
})

允许我为vocalRange 发布任何内容,无需任何形式的验证。这是怎么回事?为什么对字符串数组的验证不像对单个字符串那样有效?

【问题讨论】:

  • 你试过vocalRange: [{ type: String }]吗?
  • 天哪,我敢打赌就是这样。让我试试。
  • 是的@tsuz 就是这样!谢谢,我想我刚刚度过了漫长的一天。如果您将其作为答案提交,我会标记它。

标签: node.js validation mongoose


【解决方案1】:

从我的评论中回答:

vocalRange: [{ type: String }]

应该可以。

【讨论】:

  • 嘿,这不适用于我最新的 mongoose@5.6.9
【解决方案2】:

mongoose 版本5.0.6 及更高版本开始,OP 问题现在有效!

vocalRange: {
    type: [String],  // this now works!
    enum: ["Soprano", "Mezzo-soprano", "Contralto", "Alto", "Tenor", "Baritone", "Bass"],
}

参考

https://github.com/Automattic/mongoose/issues/6204#issuecomment-374690551

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 2015-08-27
    • 1970-01-01
    • 2022-12-17
    • 2020-11-04
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多