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完全没问题。在第二次运行时,它给了我

{ [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?它也是重复的,应该返回一个错误。如果每次只抛出一个错误,为什么它是username而不是email?在架构email的上方。username如何mongoose决定首先检查/返回哪些重复项?

4

1 回答 1

1

这样做的不是 Mongoose,而是 MongoDB。标记的两个重复字段中的哪一个可能未定义。我认为只要它检查的第一个索引未通过唯一性测试,它就会简单地抛出错误。

If you need more information than what's provided in the error, you'll need to query for all potential duplicate fields separately.

于 2012-11-06T23:46:32.543 回答