Что произойдет, если попытаться вставить документ с уже существующим ID в коллекцию? Рассмотрим пример.
Исходные данные
В коллекции уже есть документ. Запрос find подтверждает его наличие.
Попытка вставки дубликата
Попробуем вставить этот же документ в ту же коллекцию. Выполним команду: db.first.insertOne({ /* скопированный документ */ }).
Результат – ошибка с кодом 11000 и сообщением: «duplicate key error collection: myDB.first index: _id». Сообщение указывает, что документ с таким же _id уже существует в коллекции first, и новый документ не был вставлен.
Влияние содержимого документа
Оставим в документе только поле _id и повторим попытку вставки. Результат тот же: ошибка. MongoDB игнорирует всё содержимое документа, кроме уникального ключа _id, сравнивая новый _id с существующими в коллекции. При совпадении возникает ошибка.
Ошибка в MongoDB Native Shell
Выполним ту же команду в MongoDB native shell. Результат: ошибка с кодом, сообщением и объектом, содержащим информацию об ошибке, включая ID документа, вызвавшего ошибку.
Вставка в другую коллекцию
Вставим документ в коллекцию «second», заменив db.first на db.second. Результат – успешная вставка.
Это подтверждает, что _id должен быть уникальным только в пределах одной коллекции. Документы в разных коллекциях и базах данных могут иметь одинаковые _id.
Частые случаи возникновения ошибки
Ошибка обычно возникает при пакетной загрузке набора документов, часть из которых уже существует в коллекции.