我有一个单词的集合,方案如下:
var wordsSchema = new Schema({
name : { type : String , trim : true , required : true , unique : true , index: true},
definition : { type : String , trim : true , required : true }
});
当我尝试将带有空名称或定义的新单词保存到集合required: true
时,工作结束返回错误,但是当我尝试更新集合并设置空名称或定义值时,required:true
没有' t工作和更新的单词与空字段保存到集合我想防止将空单词保存到集合中。如何以最短的方式实现此目的,我的更新代码如下所示:
words.update({ _id : word._id }, { $set : {
name : word.name,
definition : word.definition
}
} , function(err,data) {
if(err) {
res.status(1033).send("There was error while changing word");
} else {
res.send('Word has successfully changed');
}
});
答案 0 :(得分:3)
required:true
不是在数据库级别维护的东西,而是mongoose本身为您处理。当你进行更新操作时,mongoose 不会运行你的验证器(required:true
是一种验证器)。
mongoose 4即将发生变化,验证者会在更新时运行。目前,您的选择是
doc.save
将运行验证程序(由mongoose强制执行)unique
索引,mongodb将不允许您插入另一个没有该字段值的文档(由mongodb强制执行)我会建议最后一个选项。