如果两个使用一个MongoDB实例的客户端在没有«forceServerObjectId:true»的情况下同时执行和插入操作,会发生什么情况。是否可以生成相同的ObjectID,是否可能存在冲突?
答案 0 :(得分:2)
每个集合的_id字段都有一个隐含的唯一索引,这使得具有相同_id的两个对象不可能存在于同一个集合中。
当具有相同_id值的两个对象与collection.save
一起存储时,一个文档将替换另一个文档。
当它们与collection.insert
一起存储时,其中一个插入将失败并出现重复键错误。
但请注意,MongoDB ObjectIDs包含24位机器ID。这使得两个客户端无法生成相同的ID,除非它们具有相同的机器ID。即便如此,也不太可能。当然,这只适用于让MongoDB驱动程序(或shell)自动生成ObjectID的情况。当您手动设置时,MongoDB允许使用任何类型的任何值作为_id字段的值。当你这样做时(你不应该),你有责任确保唯一性。