Ketika saya menggunakan Mongodb dengan Java, saya ingin menghasilkan id Object pada klien. Namun, sebelum saya memasukkan record, saya harus melakukan query mongodb terlebih dahulu untuk memastikan bahwa id yang dihasilkan oleh metode ObjectId() adalah unik. Apakah ada cara agar saya bisa menghasilkan id objek yang unik tanpa mengakses mongodb dua kali?
Anda dapat membuat ObjectId pada klien tanpa berkonsultasi dengan database. ID tersebut akan menjadi unik (Anda harus berusaha keras untuk mendapatkan dua ID objek yang identik).
ObjectId id = new ObjectId();
// or this
ObjectId id = ObjectId.get();
Object ID tidak seperti id berurutan yang Anda gunakan dalam RDMS. Jika mereka dibuat dengan benar sesuai dengan spesifikasi Object ID Anda tidak perlu khawatir tentang keunikannya.
Yang harus Anda lakukan adalah memastikan bahwa Anda selalu membuat Object ID baru daripada menggunakannya kembali.
Pada MongoDB Java Driver 3.3.0, ada beberapa cara berikut untuk membuat ObjectIds.
Menggunakan konstruktor tanpa parameter: Menyediakan ObjectId unik*
1. ObjectId id1 = new ObjectId(); //Generates unique id
1.1. ObjectId id2 = ObjectId.get(); //Calls new ObjectId();
Menggunakan konstruktor berparameter: Parameter mempengaruhi keunikan ObjectId*
2. public ObjectId(byte[] bytes) // Receives a byte array of size 12.
3. public ObjectId(String hexString) //Receives a String that is a hexadecimal representation of 12 bytes.
4. public ObjectId(Date date) // Receives a Date object
5. public ObjectId(Date date, int counter) //Receives date and a counter
6. public ObjectId(Date date,
int machineIdentifier,
short processIdentifier,
int counter) //Receives Date, MachineId, PID and counter.
7. public ObjectId(int timestamp,
int machineIdentifier,
short processIdentifier,
int counter) //Receives Epoch time in sec, MachineId, PID and counter.
Memahami ObjectId:
ObjectId terdiri dari 12 byte, dibagi sebagai berikut:
ObjectID layout
0 1 2 3 4 5 6 7 8 9 10 11
|time |machine |pid |inc |