如果插入时没有提供该字段,MongoDB会自动生成一个12字节的BSON格式的_id,以便用作文档的主键。我的问题是:-1我能配置MongoDB为主键生成20个字节吗?-2如果不能,我能通过显式地分配新文档的20个字节的键来“强制”MongoDB存储20个字节的主键吗?-3,在-2的情况下,这是标准的还是MongoDB将抛出异常?
发布于 2014-05-21 03:54:20
您不能更改内置ObjectId的格式,这是mongoDb默认用于_id的格式。但是,对于问题2和3,您可以在插入时指定自己的问题。MongoDB不会抛出异常。它必须是唯一的,具有唯一的索引,并且不能是数组。从文档中:
_id字段具有以下行为和约束:
默认情况下,在创建集合期间,MongoDB会在_id字段上创建唯一索引。_id字段始终是文档中的第一个字段。如果服务器首先接收到不具有_id字段的文档,
然后,服务器会将该字段移到开头。
_id字段可以包含任何BSON数据类型的值,而不是数组。警告为确保正常复制,请不要在_id字段中存储BSON正则表达式类型的值。
以下是存储_id值的常用选项:
将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。
https://stackoverflow.com/questions/23767963
复制相似问题