1

在 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 代表一个字节)

这与文档中描述的有点不同(文档:http ://docs.mongodb.org/manual/core/object-id/ )

XXXX   XXX       XX    XXX
--------------------------
time   machine   pid   inc

(每个 X 代表一个字节)

谁能让我知道为什么 java-driver 没有遵循规范?

谢谢!

4

3 回答 3

1

我希望 ObjectID 的初衷是生成一个合理唯一的主键,而不是打包驱动程序然后开始解析为数据的字段。

随着 MongoDB 生态系统的发展,一些开发人员发现从多个驱动程序解释 ObjectID 以及确保生成的 ID 的一致性很有用。

如果您查看BSON 规范,您将看到旧驱动程序使用的 UUID 的一些子类型,以及互操作性的各种更改。例如,PYTHON-387中提到了支持 C# 和 Java 驱动程序的“传统”字节顺序和字节序。

根据MongoDB 问题跟踪器中的JAVA-337,计划在 3.0 Java 驱动程序版本中解决 Java 驱动程序的 ObjectID 不一致问题。

于 2013-03-01T14:17:02.143 回答
1

我会把这个作为答案,因为评论有点长。

有几个 JIRA 链接到此:

第二个承认规范在 Java 下是不同的,但没有提及原因。

如果我猜测这可能是由于 Java 中的 PID 和机器 ID 的工作方式,它可能与:https ://jira.mongodb.org/browse/JAVA-586 有关。

您可能会在 Google Group 上找到更好的答案:mongodb-user,因为维护人员在那里闲逛。

于 2012-12-08T14:41:52.917 回答
0

我无法解释为什么它们不同,但我可以告诉你 Python 驱动程序使用与 Java 相同的方法生成对象 ID:

https://github.com/mongodb/mongo-python-driver/blob/master/bson/objectid.py

于 2012-12-08T14:29:02.223 回答