1

ここで明らかな何かが欠けているに違いありません。私の理解では、以下のコードは 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 行が失敗することに気付きました。

4

1 に答える 1

0

私の推測では、インデックスが固執しなかったため、後で構文を修正しました。

db.users.getIndexes()

これを使用して、次回コレクションにインデックスがあることを確認します。

于 2013-08-02T12:49:25.640 に答える