首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB将主键扩展到20个字节

问MongoDB将主键扩展到20个字节
EN

Stack Overflow用户
提问于 2014-05-21 03:06:52
回答 1查看 209关注 0票数 0

如果插入时没有提供该字段,MongoDB会自动生成一个12字节的BSON格式的_id,以便用作文档的主键。我的问题是:-1我能配置MongoDB为主键生成20个字节吗?-2如果不能,我能通过显式地分配新文档的20个字节的键来“强制”MongoDB存储20个字节的主键吗?-3,在-2的情况下,这是标准的还是MongoDB将抛出异常?

EN

回答 1

Stack Overflow用户

发布于 2014-05-21 03:54:20

您不能更改内置ObjectId的格式,这是mongoDb默认用于_id的格式。但是,对于问题2和3,您可以在插入时指定自己的问题。MongoDB不会抛出异常。它必须是唯一的,具有唯一的索引,并且不能是数组。从文档中:

_id字段具有以下行为和约束:

默认情况下,在创建集合期间,MongoDB会在_id字段上创建唯一索引。_id字段始终是文档中的第一个字段。如果服务器首先接收到不具有_id字段的文档,

然后,服务器会将该字段移到开头。

_id字段可以包含任何BSON数据类型的值,而不是数组。警告为确保正常复制,请不要在_id字段中存储BSON正则表达式类型的值。

以下是存储_id值的常用选项:

  • 使用ObjectId。
  • 使用自然唯一标识符(如果可用)。这节省了空间,并避免了额外的index.
  • Generate和自动递增的数字。请参阅在应用程序代码中创建自动递增序列Field.
  • Generate a UUID。为了更有效地存储集合和_id索引中的UUID值,

将UUID存储为BSON BinData类型的值。

如果:二进制子类型值在0-7或128-135范围内,并且字节数组的长度是: 0、1、2、3、4、5、6、7、8、10、12、14、16、20、24或32,则BinData类型的索引键更有效地存储在索引中。

使用驱动程序的BSON UUID工具生成UUID。请注意,驱动程序实现可能以不同的方式实现UUID序列化和反序列化逻辑,这可能与其他驱动程序不完全兼容。有关UUID interoperability.的信息,请参阅驱动程序文档

备注

大多数MongoDB驱动客户端都会包含_id字段,并在将插入操作发送到MongoDB之前生成一个ObjectId;但是,如果客户端发送的文档没有_id字段,则mongod将添加_id字段并生成ObjectId。

http://docs.mongodb.org/manual/core/document/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23767963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档