Mongoose数组类型错误地验证非数组

时间:2018-01-30 23:59:48

标签: node.js mongodb mongoose

我使用的是Mongoose 4.8.0,我有以下部分架构:

const UserSchema = mongoose.Schema({
    completed: [{
        type: String,
        enum: ['ONBOARDING', 'INTRO_MODAL', 'SAVED_FAVORITES']
    }]
});
const User = mongoose.model('Users', UserSchema);

如果我运行以下代码:

User.findOneAndUpdate(
    { _id: userId },
    { $set: { completed: ['foo'] } },
    { runValidators: true },
    callback
);

我收到的验证错误就像我预期的那样,因为'foo'不是提供的enum之一。

但是当我运行以下代码时:

User.findOneAndUpdate(
    { _id: userId },
    { $set: { completed: false } },
    { runValidators: true },
    callback
);

绕过了对数组的验证,最终得到的User文档带有completed: false。这也适用于将completed设置为数组以外的任何内容。

如何确保completed只能是字符串数组?

1 个答案:

答案 0 :(得分:0)

为了防止其他人遇到同样的问题,我发现升级到Mongoose 4.11.x修复此问题。它一定是个错误。