當我在Java中使用Mongodb時,我想在客戶端生成Object id。然而,在插入記錄之前,我必須首先查詢mongodb,以確保由ObjectId()方法生成的id是唯一的。有沒有什麼辦法可以生成唯一的對象ID,而無需兩次訪問mongodb?如何在mongodb中生成唯一的對象ID
回答
對象ID不像您在RDMS中使用的順序標識。如果它們根據Object ID specification正確生成,則不必擔心它們是唯一的。
您所要做的就是確保始終創建新的Object ID而不是重複使用它們。
您可以在不諮詢數據庫的情況下在客戶端上生成ObjectId。這樣的ID將是唯一的(你將不得不努力獲得兩個相同的對象id)。
ObjectId id = new ObjectId();
// or this
ObjectId id = ObjectId.get();
即使世界那些兩種方法之間的差異?歡呼聲 – DanielPanic 2015-04-01 10:42:20
沒有區別。 ObjectId#只是調用構造函數。 – 2016-01-19 12:18:13
這是如何工作的?這是JavaScript嗎? – Jennifer 2016-01-21 04:22:45
從MongoDB Java Driver 3.3.0開始,有以下幾種創建ObjectIds的方法。
使用不帶參數的構造函數:提供獨特的ObjectId
1. ObjectId id1 = new ObjectId(); //Generates unique id
1.1. ObjectId id2 = ObjectId.get(); //Calls new ObjectId();
使用參數的構造函數:參數影響的的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.
理解ObjectI的獨特性d:
的ObjectId有12個字節,劃分如下:
ObjectID layout
0 1 2 3 4 5 6 7 8 9 10 11
|time |machine |pid |inc |
- 1. 生成唯一對象ID
- 2. MongoDB:對象ID唯一性
- 3. 類/對象生成唯一的ID
- 4. Spine.js如何生成唯一的ID?
- 5. 如何生成唯一的ID?
- 6. 如何在循環中生成唯一的字符串對象
- 7. 在J2ME中生成唯一的ID
- 8. 如何在mongoDB對象中添加一個唯一的自動增量ID
- 9. C生成唯一的ID
- 10. 生成唯一的ID
- 11. 如何生成自定義唯一ID
- 12. 如何生成主機唯一ID?
- 13. 流利nhibernate如何生成唯一ID
- 14. 如何在PHP中生成一個簡短的唯一ID?
- 15. 在MS-Excel中生成唯一ID
- 16. 唯一事件ID生成
- 17. 生成C#長唯一ID
- 18. MongoDB的:與特定ID,而不是生成的對象ID
- 19. 創建短,唯一對象ID的MongoDB中
- 20. 如何在Expression Engine 2中生成唯一的ID?
- 21. 如何在Python中生成唯一的ID?
- 22. 如何在現有數據庫中生成唯一的ID-s?
- 23. 如何在Java中生成唯一的ID(整數)?
- 24. 如何在Dart中生成唯一的ID
- 25. 如何在MySQL中生成唯一的ID?
- 26. 如何在php中生成唯一的會話ID
- 27. 如何在SAP B1中生成唯一的ID /序列號?
- 28. 生成一個唯一的ID
- 29. 生成一個唯一的機器ID
- 30. 如何在Perl中使用哈希生成唯一ID?
所以如果我通過生成id:ObjectId id = new ObjectId(); 那麼這個ID必須是唯一的?謝謝 – NOrder 2012-01-04 07:48:00
@vienna正確。每次將記錄保存到數據庫時,都必須確保調用它。 – 2012-01-04 07:55:11