如果两个客户端使用一个 MongoDB 实例,在没有 «forceServerObjectId: true» 的情况下同时执行和插入操作会发生什么。是否可以生成相等的 ObjectID,是否可能存在冲突?
问问题
2165 次
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 回答