Я осквернил свою коллекцию монго с полем ObjectId '_id' в качестве ключа шарда.
Мне нужно обеспечить уникальный индекс для этой коллекции.
К сожалению, вы не можете создавать уникальные индексы в защищенной коллекции.
MongoDB предлагает:
Используйте вторичную коллекцию для обеспечения уникальности.
1009 * Docs *
Но всегда могут быть проблемы с согласованностью, побеждающие этот метод, поскольку mongoDB не поддерживает транзакции.
Например,
- У нас есть коллекции Sample и Sample_proxy (индексная коллекция). Образец отсеивается, а Sample_proxy - нет. Таким образом, уникальный индекс может быть создан для Sample_proxy .
- Перед вставкой в Образец , всегда сначала пытайтесь вставить в Sample_proxy .
- Если вставить в Sample_proxy не удается => нарушение уникального индекса.
- Если нет, сделать фактическую вставку в Образец .
Примечание. Если фактическая вставка не удалась, не забудьте удалить документ из Sample_proxy для обеспечения согласованности.
Звучит надежно, Но!
Что если вы успешно вставите в Sample_proxy и перед фактической вставкой аппарат выключится.
Просмотр двух разных коллекций не может быть сделан атомарно.
Я не вижу способа полностью устранить несоответствие.
Если есть решение для этого, пожалуйста, просветите меня.