MongoDB crée automatiquement un identifiant pour chaque objet qui y est inséré. Vous n'avez pas besoin de créer votre propre identifiant.
Si vous avez besoin d'un identifiant entier incrémenté, vous rencontrez toutes sortes de problèmes de synchronisation distribuée - il est en fait assez difficile de faire le bon choix pour les cas non triviaux.
Pour générer un identifiant unique de la manière la plus simple à laquelle je puisse penser :
- mettre un index sur la colonne id avec une contrainte unique.
- pour insérer une requête de document sur l'index pour le nombre le plus élevé, ajoutez 1, utilisez-le comme identifiant.
- si l'insertion échoue en raison d'une nouvelle tentative d'index en double
Cela implique quelques allers-retours mais devrait être robuste et avec l'index en place assez rapidement.
Si vous n'avez qu'un seul emplacement qui les écrit, vous pouvez encaisser l'identifiant dans un AtomicInteger localement et ne faire le processus aller-retour complet que si vous détectez une collision, puis mettre à jour l'AtomicInteger.