我使用npm的mongoose 3.0.3的模式:

var schema = new Schema({

    _id: Schema.ObjectId,
    email: {type: String, required: true, unique: true}

});

如果我试图保存一封已经在db中的邮箱,我希望得到ValidationError,就像忽略required字段一样.但事实并非如此,我得到了MongoError: E11000 duplicate key error index分.

这不是验证错误(即使我删除了unique:true也会发生).

知道为什么吗?

推荐答案

我更喜欢把它放在路径验证机制中,比如

UserSchema.path('email').validate(function(value, done) {
    this.model('User').count({ email: value }, function(err, count) {
        if (err) {
            return done(err);
        } 
        // If `count` is greater than zero, "invalidate"
        done(!count);
    });
}, 'Email already exists');

然后它会被包装成ValidationError,当你调用validatesave时,它会作为第一个参数返回.

Mongodb相关问答推荐

MongoDB聚合:将文档列表转换为列表

MongoDB-如何过滤和获取数组字段中的最新数据

如何根据两个 struct 创建一个Mongo文档?

MongoDB:如何从数组中的所有对象中删除属性?

如何使用 MindsDB 和 MQL(对于我的 MongoDB 实例)实施零样本分类?

如何 db.getUser() 使用 go mongo-driver

如何为具有相同名称的嵌套字段创建文本索引

Mongoose 更新不同类型的记录

如何替换mongodb中的动态键?

MongoDB 更改流副本集限制

使用 mgo 存储嵌套 struct

嵌套在文档数组中的mongodb展开数组

如何使用原子操作在一个文档中切换布尔字段?

MongoDB 查找精确的数组匹配,但顺序无关紧要

Mongo按实际上是数字的字符串值排序

在 MongoDB 上分片 GridFS

MongoException: Index with name: code already exists with different options

mongodb: UnknownError assertion src/mongo/db/server_options_helpers.cpp:355

try 启用 Mongo DB 身份验证时发生 TypeError

mongoose查询返回 null