Mongodb 更新时防止出现空值

Mongodb prevent empty values while updating

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

var wordsSchema = new Schema({

    name         : { type : String  , trim : true , required : true , unique : true , index: true},
    definition   : { type : String  , trim : true , required : true }

});

当我尝试将具有空名称或定义的新词保存到集合中时 required: true 工作结束 return 错误,但是当我尝试更新集合并设置空名称或定义值时 required:true 不起作用,更新后的带有空字段的词保存到集合中我想防止将空词保存到集合中。我怎样才能以最短的方式实现这一目标,我的更新代码如下所示:

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

    });

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

mongoose 4 中即将发生变化,其中验证器获得 运行 更新。目前,您的选择是

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

我会推荐最后一个选项。