2

如果两个客户端使用一个 MongoDB 实例,在没有 «forceServerObjectId: true» 的情况下同时执行和插入操作会发生什么。是否可以生成相等的 ObjectID,是否可能存在冲突?

4

1 回答 1

2

每个集合的 _id 字段都有一个隐含的唯一索引,这使得具有相同 _id 的两个对象不可能存在于同一个集合中。

当两个具有相同 _id 值的对象用 存储时collection.save,一个文档将替换另一个文档。

当它们与 一起存储时collection.insert,其中一个插入将失败并出现重复键错误。

但请注意,MongoDB ObjectID包含 24 位机器 ID。这使得两个客户端不可能生成相同的 ID,除非它们具有相同的机器 ID。即使这样也不太可能。当然,这仅适用于让 MongoDB 驱动程序(或 shell)自动生成 ObjectID 的情况。当您手动设置 _id 字段时,MongoDB 允许使用任何类型的任何值作为值。当你这样做时(你不应该这样做),确保唯一性是你的责任。

于 2013-05-22T13:05:15.560 回答