当我在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