E11000 Ошибка дублированного ключа на нескольких уникальных ключах в mongoDB - PullRequest
1 голос
/ 28 апреля 2020

У меня есть 2 уникальных ключа в моей userSchema:

email: {
        type: String,
        required: true,
        unique: true
    },
username: {
        type: String,
        required: true,
        unique: true
    }

Вы не можете добавить ни имя пользователя, ни адрес электронной почты, которые уже существуют в базе данных. Как я могу сказать пользователю, какой именно уже существует в базе данных, потому что есть только один код ошибки?

if (err.code == 11000)
    return res.status(422).send(['Duplicate email adrress found.']);

1 Ответ

1 голос
/ 28 апреля 2020

Для этих двух уникальных индексов на email & username, если вы можете получить имена индексов, используя:

db.collectionName.getIndexSpecs()

Затем при вставках, если вы получите ошибку дублирующегося ключа:

WriteResult({
   "nInserted" : 0,
   "writeError" : {
      "code" : 11000,
      "errmsg" : "E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null }"
   }
})

В своем коде вы можете сделать:

if (err.code == 11000) {
  if (err.msg.includes("email_1")) { // assuming name is `email_1` & also you can trim msg to get failing input value.
    return res.status(422).send(["Duplicate email address found."]);
  } else {
    return res.status(422).send(["Duplicate username found."]);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...