È unico per tutti gli scopi pratici. La non unicità menzionata è piuttosto teorica.
L'ObjectId è costruito fuori
- un timestamp (secondi dall'epoca)
- un identificatore di macchina
- l'ID del processo
- e un contatore di 3 byte che inizia con un valore casuale ogni secondo
Quindi, a mediana, a meno che tu non scriva più di 3080 documenti al secondo per cliente, dovresti essere salvato. È da notare che _id
ha un vincolo unico:Anche se proveresti a scrivere lo stesso ObjectId due volte, ci sarebbe un'eccezione.
Nota a margine:anche algoritmi hash come MD5 o (in misura minore) SHA256 hanno una leggera possibilità di collisione. Ma con un vincolo unico, sei al sicuro.
Modifica :Poiché viene generata un'eccezione nel caso molto, molto, MOLTO raro in cui due ObjectId identici vengono generati e tentati di essere scritti contemporaneamente, è sufficiente gestirli generando un nuovo ObjectId e provare a salvare nuovamente il documento.