无法让mongoose / mongoDB抛出11000(重复错误)

时间:2013-08-02 10:53:25

标签: mongodb mongoose mongodb-query

我肯定会遗漏一些明显的东西。我的理解是下面的代码应该抛出11000个重复键错误,但它只是将两个用户添加到数据库中,并且不会抛出任何错误。任何人都有任何想法如何使电子邮件独一无二? db version v2.4.5。

var mongoose = require('mongoose')
, Schema = mongoose.Schema;

mongoose.connect("mongodb://localhost/db");

var User = mongoose.model('User', new Schema({
    email: {type: String, index: true, unique: true}
}));

new User({
    email: "a@duplicate.com"
}).save(function(err,user){
    console.log(err);
});

new User({
    email: "a@duplicate.com"
}).save(function(err,user){
    console.log(err);
});

修改

我似乎通过转到mongo命令行并键入:

来使其工作
db.users.ensureIndex({email:1},{unique:true});

然后节点脚本按预期正常工作并抛出错误。但是,我不确定为什么这不通过Mongoose工作。 mongoose debug的输出是:

Mongoose: users.ensureIndex({ email: 1 }) { safe: undefined, background: true, unique: true }
Mongoose: users.insert({ __v: 0, _id: ObjectId("51fb961445cf690000000001"), email: 'a@duplicate.com' }) {}
Mongoose: users.insert({ __v: 0, _id: ObjectId("51fb961445cf690000000002"), email: 'a@duplicate.com' }) {}
Err=null
Err=null

我注意到如果我手动执行它,输出中的ensureIndex行会失败。

1 个答案:

答案 0 :(得分:0)

我的猜测是你的索引没有坚持,你后来修改了语法。

db.users.getIndexes()

使用它来验证下次集合中是否有索引。