我肯定会遗漏一些明显的东西。我的理解是下面的代码应该抛出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行会失败。
答案 0 :(得分:0)
我的猜测是你的索引没有坚持,你后来修改了语法。
db.users.getIndexes()
使用它来验证下次集合中是否有索引。