MongoDB automatycznie tworzy identyfikator dla każdego wstawionego do niego obiektu. Nie musisz tworzyć własnego identyfikatora.
Jeśli potrzebujesz rosnącego identyfikatora liczby całkowitej, natkniesz się na różnego rodzaju problemy z rozproszoną synchronizacją - w rzeczywistości jest to dość trudne do uzyskania w nietrywialnych przypadkach.
Aby wygenerować unikalny identyfikator w najprostszy sposób, jaki przychodzi mi do głowy:
- umieść indeks w kolumnie id z unikalnym ograniczeniem.
- Aby wstawić zapytanie o dokument do indeksu o najwyższą liczbę, dodaj 1, użyj tego jako identyfikatora.
- jeśli wstawianie nie powiedzie się z powodu zduplikowanej próby indeksowania
Wymaga to kilku podróży w obie strony, ale powinien być solidny i z dość szybkim indeksem.
Jeśli masz tylko jedną lokalizację, w której je zapisujesz, możesz spieniężyć identyfikator w AtomicInteger lokalnie i wykonać pełny proces podróży w obie strony tylko wtedy, gdy wykryjesz kolizję, a następnie zaktualizuj AtomicInteger.