Mongodb在更新时会阻止空值

时间:2015-03-20 17:49:02

标签: node.js mongodb mongoose

我有一个单词的集合,方案如下:

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');
        }

    });

1 个答案:

答案 0 :(得分:3)

required:true不是在数据库级别维护的东西,而是mongoose本身为您处理。当你进行更新操作时,mongoose 不会运行你的验证器(required:true是一种验证器)。

mongoose 4即将发生变化,验证者会在更新时运行。目前,您的选择是

  • 手动检查是否存在任何内容(由您的应用强制执行)
  • 对文档进行查找,然后编辑该字段并执行doc.save将运行验证程序(由mongoose强制执行)
  • 为' word'添加一个空值的文档。因为您在该字段上有unique索引,mongodb将不允许您插入另一个没有该字段值的文档(由mongodb强制执行)

我会建议最后一个选项。