想知道:MongoDB _id默认是唯一的吗?

Pet*_*chP 9 mongodb

只是坐在这里,迟到,累了,开始思考,

MongoDB _id默认是唯一的,还是我必须将其设置为唯一?

对你们许多人来说,这只是一个愚蠢的问题.但是真的找不到这个.由于我的英语不好,当我得到一些LONG解释时,有时候很难理解.

请多多包涵 :-)

Max*_*Max 21

大多数情况下,mongodb 中的 _id 足够唯一。但有一种边缘情况可能会生成重复的 id:

如果您在同一秒内生成超过 (2^(3 * 8))-1 = 16,777,215 个对象 ID,则由于对象 ID 的生成方式,您可能会获得重复的 ID,否则就没有问题。如果您确实在同一秒内生成了那么多 id,那么您就中了彩票,并且有 1 in 2^(5 * 8) 的机会获得重复的 id。

如果您成功地通过实际用例实现了这一点,请告诉我。显然,谷歌每秒只能获得大约 70,000 次搜索。

这是我的来源:https://www.mongodb.com/blog/post/generating-globally-unique-identifiers-for-use-with-mongodb

ObjectID是一个96位数字,其组成如下:

  • 一个 4 字节时间戳值,表示自 Unix 纪元以来的秒数(直到 2106 年才会用完秒数)
  • 5 字节随机值,以及
  • 一个 3 字节递增计数器,以随机值开始。

更新:我还听说 5 字节随机值可以替换为代表机器 id 的 3 字节和代表进程 id 的 2 字节。


Ser*_*sev 12

所有文档都包含一个_id字段.所有集合(上限除外)都会自动创建唯一索引_id.

试试这个:

db.system.indexes.find()
Run Code Online (Sandbox Code Playgroud)

  • 如果默认情况下它是唯一的,为什么它不显示"unique":true.其次,objectId是关于子文档和数组自动唯一的.必须在数组字段上手动创建索引 (3认同)