MongoDB opretter automatisk et id for hvert objekt, der er indsat i det. Du behøver ikke oprette dit eget id.
Hvis du har brug for et stigende heltals-id, støder du ind i alle mulige problemer med distribueret synkronisering - det er faktisk ret svært at finde det rigtige for ikke-trivielle tilfælde.
For at generere et unikt id på den enkleste måde, jeg kan komme i tanke om:
- sæt et indeks på id-kolonnen med en unik begrænsning.
- for at indsætte en dokumentforespørgsel på indekset for det højeste tal, tilføje 1, brug det som id.
- hvis indsættelse mislykkes på grund af duplikatindeks, prøv igen
Det involverer et par rundrejser, men bør være robust og med indekset på plads ret hurtigt.
Hvis du kun har én lokation, der skriver disse, kan du indløse id'et i et AtomicInteger lokalt og kun udføre hele rundtursprocessen, hvis du opdager en kollision, og derefter opdatere AtomicInteger.