O MongoDB cria automaticamente um id para cada objeto inserido nele. Você não precisa criar seu próprio id.
Se você precisar de um id inteiro incrementado, você se deparará com todos os tipos de problemas de sincronização distribuída - na verdade, é muito difícil acertar em casos não triviais.
Para gerar um ID exclusivo, a maneira mais simples que posso pensar:
- coloque um índice na coluna id com uma restrição exclusiva.
- para inserir uma consulta de documento no índice para o número mais alto, adicione 1, use-o como id.
- se a inserção falhar devido à repetição do índice duplicado
Envolve algumas viagens de ida e volta, mas deve ser robusto e com o índice no lugar bem rápido.
Se você tiver apenas um local escrevendo isso, poderá descontar o id em um AtomicInteger localmente e só fazer o processo de ida e volta completo se detectar uma colisão e atualizar o AtomicInteger.