Untuk sedikit memperluas apa yang dikatakan Andre:
Karena stempel waktu ObjectID hanya untuk yang kedua, dua (atau lebih) ObjectID dapat dengan mudah dibuat dengan nilai yang sama untuk stempel waktu (4 byte pertama). Jika ini dibuat pada mesin yang sama (ID mesin - 3 byte berikutnya), dengan proses yang sama (PID - 2 byte berikutnya), maka satu-satunya hal yang membedakannya adalah bidang "inc", 3 byte terakhir di akhir.
Pembaruan:Jan 2020
Jawaban ini terus populer sehingga perlu diperbarui sedikit. Spesifikasi ObjectID telah berkembang sejak jawaban ini ditulis 8 tahun yang lalu dan 5 byte setelah stempel waktu sekarang hanya acak, yang akan sangat mengurangi kemungkinan tabrakan. Tiga byte terakhir masih inkremental, tetapi diinisialisasi pada nilai acak untuk memulai, sekali lagi membuat kemungkinan tabrakan lebih kecil. ObjectID sekarang berisi lebih sedikit konteks (Anda tidak dapat dengan mudah mengetahui di mana itu dihasilkan dan oleh proses apa) tetapi saya kira informasi itu tidak digunakan dengan cara apa pun yang berarti dan telah ditinggalkan demi pengacakan ID yang lebih baik.
Akhiri Pembaruan
Lihat di sini untuk spesifikasi lengkapnya:
https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification
Bidang "inc" itu adalah bidang yang terus bertambah (maka Anda dapat mengharapkan jenisnya berada dalam urutan sisipan/buat) atau nilai acak (maka kemungkinan unik, tetapi tidak dipesan), dengan asumsi spesifikasi diimplementasikan dengan benar tentu saja . Perhatikan bahwa ObjectID dapat dibuat oleh driver, atau aplikasi (atau bahkan secara manual) daripada oleh MongoDB itu sendiri, jadi kecuali jika Anda memiliki kontrol penuh atas cara pembuatannya, maka salah satu atau semua hal di atas mungkin berlaku.