Здравейте, ако четете това, вероятно сте направили нещо странно с уникалните индекси на MongoDB. Но не се притеснявайте, в тази статия ще разкрием решението на грешката duplicate key.

Защо това се случва?

Тази грешка просто означава, че сте имали уникален индекс в определено поле, например: „email_address“, така че mongodb очаква уникален имейл адрес за всеки документ в колекцията.

Кажете сега, по-рано този индекс не беше зададен на unique и имахте 2 записа с един и същ имейл адрес или без имейл адрес (нулева стойност).

Сега се опитвате да добавите уникален индекс към схемата. Но вашата колекция вече има дубликати, така че съобщението за грешка казва, че не можете да вмъкнете дублираща се стойност отново. Оттук и грешката duplicate key.

Как да поправя тази грешка?

Има няколко начина, по които можете да направите това, изброени по-долу.

  • Пуснете колекцията
  • Изтрийте записа с дублиращата се стойност
  • Премахнете уникалния индекс

1) Пуснете колекцията:

За да премахнете колекцията, можете просто да използвате db.<collection_name>.drop(). Това ще премахне колекция от базата данни, както и всеки от свързаните с нея индекси. Не забравяйте да замените <collection_name> с името на колекцията, която искате да премахнете.

2) Изтрийте записа с дублиращата се стойност:

Това решение е най-доброто, ако искате да запазите полетата уникални, без да се налага да изчиствате цялата колекция. Просто трябва да намерите пролематичния запис и да го изтриете. За да намерите записа, потърсете съобщението за грешка, което трябва да изглежда по следния начин:

Възникна грешка: MongoServerError: E11000 колекция от грешки при дублиран ключ: <db>.<collection>index: <problem_field>dup ключ: { <problem_field>:<duplicate_value>}

Стойностите, които представляват интерес тук, са <problem_field> и <duplicate_value>. <probelm_field> е полето, което се очаква да бъде уникално, а <duplicate_value> е стойността, споделена между две уж уникални полета в базата данни.

След като разполагаме с тази информация, можете просто да изтриете съответния запис от базата данни по следния начин:

db.<collection>.remove({<problem_field>:<duplicate_value>})

3) Премахнете уникалния индекс

Това решение е оптимално в ситуация, в която не се интересувате от уникалността на полето. Можете да постигнете това със следната команда:

db.<collection>.dropIndex(<index_name>)

…Или чрез уеб интерфейса на mongoDB, като направите следното:

  1. Влезте във вашия MongoDB акаунт.
  2. Изберете желания клъстер.
  3. Кликнете върху „Преглед на колекциите“.
  4. Кликнете върху „Индекси“.
  5. Намерете желания индекс и щракнете върху червената икона „кошче“.
  6. Въведете името на индекса във входа, който се появява, и щракнете върху „Drop“.

Това е! Отървахте се от уникалния индекс и поправихте грешката duplicate key

Това е опаковка! Можете да използвате всяко решение, което отговаря на вашите нужди. Оценявам, че отделихте време да прочетете тази статия. 😃

Psst… Последвайте ме в twitter @HippyDreaded