ここで明らかな何かが欠けているに違いありません。私の理解では、以下のコードは 11000 Duplicate Key エラーをスローする必要がありますが、両方のユーザーをデータベースに追加するだけで、エラーはスローされません。メールをユニークにする方法を知っている人はいますか? データベース バージョン 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: 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 行が失敗することに気付きました。