Я сталкиваюсь с ошибкой дублирования ключа в Mongo Sharded Cluster (MSC), которая не возникает при работе с набором реплики Mongo.
У меня есть простая операция в клиентском приложении:
// pseudocode - email is unique key
subscriber = db.newsletter.find({email: "john@smith.com"})
if (subscriber == null) {
db.newsletter.insert({email: "john@smith.com", name: "John"})
} else {
db.newsletter.update({email: "john@smith.com"}, {name: "John"})
}
Я не включил его в приведенный выше код, но мне нужно получить _id документа, поэтому использование upsert не вариант.
Ошибка : Если вышеуказанный процесс выполняется дважды для одного и того же и нового электронного письма, это приведет к ошибке дублированного ключа.Вторая итерация не сможет найти подписчика, поэтому она будет пытаться вставить, несмотря на то, что документ уже существует в коллекции.
Насколько я знаю, запуск единственного экземпляра вышеупомянутого клиента не должен вызывать ошибку дублирующегося ключа, но этоделает.