在BSON Java实现中,ObjectId由3个部分组成(源代码:http://grepcode.com/file/repo1.maven.org/maven2/org.mongodb/mongo-java-driver/2.9.0/org/bson/types/ObjectId.java#ObjectId.%3Cinit%3E%28int%2Cint%2Cint%29):
XXXX XXXX XXXX
-------------------------
time machine&pid inc
(每个X代表一个字节)
这与文档(doc:http://docs.mongodb.org/manual/core/object-id/)
中描述的内容略有不同XXXX XXX XX XXX
--------------------------
time machine pid inc
(每个X代表一个字节)
任何人都可以告诉我为什么java驱动程序没有遵循规范?
谢谢!
答案 0 :(得分:1)
我会把这个作为答案,因为评论有点长。
这里有几个JIRA链接:
第二个承认Java下的规范不同,但没有提及原因。
如果我猜测它可能是由于Java中PID和机器ID的工作方式,它可能与:https://jira.mongodb.org/browse/JAVA-586有关。
您可以在Google网上找到更好的答案:mongodb-user,因为维护人员会在那里闲逛。
答案 1 :(得分:1)
我希望ObjectID的原始意图是生成一个相当独特的主键,而不是打包驱动程序然后开始解析为数据的字段。
随着MongoDB生态系统的发展,一些开发人员发现从多个驱动程序解释ObjectID以及确保生成的ID的一致性很有用。
如果查看BSON spec,您会看到旧驱动程序使用的UUID有一些子类型,以及互操作性的各种更改。例如,PYTHON-387提到支持“遗留”字节顺序和C#和Java驱动程序的字节顺序。
根据MongoDB问题跟踪器中的JAVA-337,计划在3.0 Java驱动程序版本中解决Java驱动程序的ObjectID不一致问题。
答案 2 :(得分:0)
我无法解释为什么它们不同,但我可以告诉你,Python驱动程序使用与Java相同的方法生成对象ID:
https://github.com/mongodb/mongo-python-driver/blob/master/bson/objectid.py