我使用的是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
只能是字符串数组?
答案 0 :(得分:0)
为了防止其他人遇到同样的问题,我发现升级到Mongoose 4.11.x修复此问题。它一定是个错误。