具有嵌套验证和严格模式的MongoDB模式

具有嵌套验证和严格模式的MongoDB模式,mongodb,validation,mongoose,mongoose-schema,Mongodb,Validation,Mongoose,Mongoose Schema,我已经能够使用以下规则进行正确的模式验证: 应仅保存预期字段(因此为严格模式) User.Account应为空。如果为null,则必填字段不会阻止保存架构 如果User.Account不为空,则需要遵守验证规则(.password和.email必需) 我不想创建AccountSchema,因为它会用\u id污染帐户 我已经能够用两种模式来实现这一点(UserSchema和AccountSchema)。但如前所述,问题在于它在User.Account字段中创建了一个\u id字段 const

我已经能够使用以下规则进行正确的模式验证:

  • 应仅保存预期字段(因此为严格模式)
  • User.Account
    应为空。如果为null,则必填字段不会阻止保存架构
  • 如果
    User.Account
    不为空,则需要遵守验证规则(
    .password
    .email
    必需)
  • 我不想创建
    AccountSchema
    ,因为它会用
    \u id
    污染
    帐户
我已经能够用两种模式来实现这一点(
UserSchema
AccountSchema
)。但如前所述,问题在于它在
User.Account
字段中创建了一个
\u id
字段

const AccountSchema: Mongoose.Schema = mongoose.Schema({
    password: { type: String, required: true },
    email: { type: String, required: true }
}, {
        strict: 'throw',
        useNestedStrict: true
    });

const UserSchema: Mongoose.Schema = mongoose.Schema({
    name: { type: String, required: true },
    account: AccountSchema
}, {
        strict: 'throw',
        useNestedStrict: true
    });
这是一个仅使用
用户模式的解决方案,但字段严格模式和验证没有按预期工作

const UserSchema: Mongoose.Schema = mongoose.Schema({
    name: { type: String, required: true },
    account: {
        type: {
            password: { type: String, required: true },
            email: { type: String, required: true }
        },
        required: false
    }
}, {
        strict: 'throw',
        useNestedStrict: true
    });
有人能告诉我我错过了什么吗

顺便说一句,我尝试了自定义验证,但它不能保证
strict
模式应该确保的对象模式安全

谢谢