0

次のコードが必要です。

var UserSchema = mongoose.Schema({
  email: {
    type: String,
    unique: true
  },
  username: {
    type: String,
    unique: true
  }
});

var User = db.model('User', UserSchema);

var user = new User();

user.email = 'some@email.com'
user.username = 'peter'

user.save(function(err){
  if (err) return console.log(err)
  console.log('user saved')
})

最初の実行ではuser saved、どちらが完全に問題ないかが示されます。2回目の実行で、それは私に与えます

{ [MongoError: E11000 duplicate key error index: node-login.users.$username_1  dup key: { : "peter" }]
  name: 'MongoError',
  err: 'E11000 duplicate key error index: node-login.users.$username_1  dup key: { : "peter" }',
  code: 11000,
  n: 0,
  lastOp: 0,
  connectionId: 1455732,
  ok: 1 }

はどうemailですか?これも重複しているため、エラーが返されます。毎回 1 つのエラーのみがスローされる場合、それが であり、usernameではないのはなぜemailですか? スキーマのemail上にあります。usernameどのmongoose重複を最初にチェック/返すかをどのように決定しますか?

4

1 に答える 1

1

これを行っているのは Mongoose ではなく、MongoDB です。フラグが立てられた 2 つの重複フィールドのうち、未定義の可能性が高いのはどれか。チェックする最初のインデックスが一意性テストに失敗するとすぐに、単にエラーをスローしているだけだと思います。

エラーで提供されたものよりも多くの情報が必要な場合は、重複する可能性のあるすべてのフィールドを個別にクエリする必要があります。

于 2012-11-06T23:46:32.543 に答える