【发布时间】:2015-09-15 02:35:26
【问题描述】:
我在尝试使“runValidators”选项工作时遇到问题。我的用户模式有一个需要设置为 true 的电子邮件字段,但每次将新用户添加到数据库(使用“upsert”选项)并且电子邮件字段为空时它不会抱怨:
var userSchema = new mongoose.Schema({
facebookId: {type: Number, required: true},
activated: {type: Boolean, required: true, default: false},
email: {type: String, required: true}
});
findOneAndUpdate代码:
model.user.user.findOneAndUpdate(
{facebookId: request.params.facebookId},
{
$setOnInsert: {
facebookId: request.params.facebookId,
email: request.payload.email,
}
},
{upsert: true,
new: true,
runValidators: true,
setDefaultsOnInsert: true
}, function (err, user) {
if (err) {
console.log(err);
return reply(boom.badRequest(authError));
}
return reply(user);
});
我不知道我做错了什么,我只是按照文档:http://mongoosejs.com/docs/validation.html
在文档中是这样说的:
请注意,在 mongoose 4.x 中,更新验证器仅在 $set 和 $unset 操作上运行。例如,无论 number 的值如何,下面的更新都会成功。
我将 $setOnInsert 替换为 $set 但结果相同。
【问题讨论】:
标签: node.js mongodb validation mongoose