【问题标题】:Mongoose schema optional fieldsMongoose 架构可选字段
【发布时间】:2014-09-16 11:59:57
【问题描述】:

我在 nodejs 中有一个带有猫鼬的用户模式,就像这样

userschema = mongoose.Schema({
    org: String,
    username: String,
    fullname: String,
    password: String,
    email: String
});

除了有时我需要添加更多字段。

主要问题是:我可以在 monogoose 架构中包含可选字段吗?

【问题讨论】:

    标签: node.js mongodb mongoose schema


    【解决方案1】:

    除了可选(默认)和必填,一个字段也可以有条件地要求,基于其他一个或多个字段。

    例如,仅当电子邮件存在时才需要密码:

    var userschema = mongoose.Schema({
        org: String,
        username: String,
        fullname: String,
        password: {
            type: String,
            required: function(){
                return this.email? true : false 
            }
        },
        email: String
    });
    

    【讨论】:

    • not working with typescript 它说:“this”关键字在类主体之外是不允许的 (no-invalid-this)tslint(1) :-(
    • 我在一个 firebase 函数项目中,想要同样的东西,即使当我从 ts-lint 文件中删除这个“no-invalid-this”属性时它也能工作,但这样做是否正确?
    • @InzamamMalik 恐怕我对打字稿没有太多经验。 Afaik,对于大多数 lint 警告没有硬性规定,所以我想删除该属性应该没有害处。
    【解决方案2】:

    默认情况下,猫鼬模式中的所有字段都是可选的(当然,_id 除外)。

    仅当您将 required: true 添加到其定义中时才需要字段。

    因此,将您的架构定义为所有可能字段的超集,将required: true 添加到所需的字段中。

    【讨论】:

    • 当且仅当第三个字段有required:true时,是否可以在几个字段上设置required:true?这个用例很常见......例如仅当 isContractor 是必填字段时,hourlyRateendDate 才是必需的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2018-06-17
    • 2014-11-23
    • 1970-01-01
    • 2015-10-29
    • 2015-12-15
    • 2015-11-25
    相关资源
    最近更新 更多