mongodb - MongoDB中的集合ID长度

标签 mongodb mongoid mongodb-.net-driver mongodb-query

我是 mongodb 和堆栈溢出的新手。

我想知道为什么 mongodb 集合 ID 是 24 个十六进制字符? 这有什么重要性?

最佳答案

为什么默认的 _id 是 24 个字符的十六进制字符串?

作为 MongoDB 文档的主键 (_id) 生成的默认唯一标识符是 ObjectId .这是一个 12 字节的二进制值,通常表示为 24 个字符的十六进制字符串,是 MongoDB BSON specification 支持的标准字段类型之一。 .

ObjectId 的 12 个字节是使用以下方法构造的:

  • 一个 4 字节的值,表示自 Unix 纪元以来的秒数
  • 一个 3 字节的机器标识符
  • 一个 2 字节的进程 ID
  • 一个 3 字节的计数器(以随机值开始)

ObjectId 的重要性是什么?

ObjectIds(或根据 GUID 公式生成的类似标识符)允许在分布式系统中独立生成唯一标识符。

当您扩展到多个应用程序服务器(或者可能是 sharded cluster 中的多个数据库节点)时,独立生成唯一 ID 的能力变得非常重要。您不希望有一个像序列计数器这样的中央协调瓶颈(例如,您可能有一个自动递增的主键),并且您希望插入新文档而不会有新标识符会变成重复。

ObjectId 通常由您的 MongoDB client driver 生成,但如果您的客户端驱动程序或应用程序代码或尚未添加 _id 字段,也可以在 MongoDB 服务器上生成。

我必须使用默认的 ObjectId 吗?

没有。如果您有更合适的唯一标识符来使用,您可以随时为 _id 提供您自己的值。这可以是单个值,也可以是使用多个字段的复合值。

_id 值的主要限制是它们对于集合必须是唯一的,并且您不能更新或删除现有文档的 _id

关于mongodb - MongoDB中的集合ID长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25356211/

相关文章:

ruby-on-rails - Mongoid 和 Rails 的字段别名

C# MongoDB 和更新项目列表

mongodb-连接到测试挂起和 mongo shell 未启动

ruby-on-rails - Faraday::ConnectionFailed:保存到 mongo 数据库时连接被拒绝

mongodb - mongodb - 用于在网络应用程序中实现类似功能的模式

ruby - 配置 Mongoid 关系以返回排序的对象

mongodb-.net-driver - 如何使用 2.0 版本的 C# mongodb 驱动程序在 $in 运算符中使用?

c# - 查询 documentdb 中的子字段

mongodb - 如何正确写嵌套的bson.M{}

java - 在 Spring 中解析 MongoRepository 的变量名称