Mongodb 更改Objectid的大小
在MongoDb中,ObjectId是一个12字节的BSON类型Mongodb 更改Objectid的大小,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,在MongoDb中,ObjectId是一个12字节的BSON类型 有没有办法减小objectID的大小?没有。它是BSON数据类型。这就像要求一个32位整数收缩自己。 每个对象都必须具有\u id属性,但您不限于ObjectIdMongoDB集合中的每个文档都需要具有唯一的\u id,但该值不必是ObjectId。因此,如果您希望减少集合中文档的大小,您有两个选择: 选择文档的一个唯一属性,并将其用作\u id字段。例如,如果您有一个帐户集合,其中帐户ID(外部提供)是数据模型的一部分,则可以将
有没有办法减小objectID的大小?没有。它是BSON数据类型。这就像要求一个32位整数收缩自己。
每个对象都必须具有\u id属性,但您不限于
ObjectIdMongoDB集合中的每个文档都需要具有唯一的\u id
,但该值不必是ObjectId
。因此,如果您希望减少集合中文档的大小,您有两个选择:
选择文档的一个唯一属性,并将其用作\u id
字段。例如,如果您有一个帐户集合,其中帐户ID(外部提供)是数据模型的一部分,则可以将帐户ID存储在\u ID
字段中
自己管理集合的主键。许多驱动程序支持定制。正如@assylias所建议的,使用int可以节省大量空间,但与使用模型中的某个字段作为\u id
相比,使用int会占用更多空间
顺便说一句,\u id
字段的值可以是复合的:您可以使用Object/hash/map/dictionary。例如,请参见
如果您在Mongo上使用某种类型的对象/模型框架,我会注意(1)。有些框架很难让开发人员覆盖id生成。例如,我对Ruby中的Mongoid有过不好的体验。在这种情况下,(2)可能是更安全的方式,因为生成发生在驱动层。也许我不理解你的问题,但如何减少它?它被设计为一种简单高效的方法,用于获取在多机器设置中定义的唯一标识符:一个4字节的值,表示自Unix纪元以来的秒数,一个3字节的机器标识符,一个2字节的进程id和一个3字节的计数器,从一个随机值开始。这是不可能的,但您可以使用整数作为\u id
,而不是ObjectId,以仅使用4个字节。您使用的是什么语言、驱动程序和映射框架(如果有)?这可能会有所帮助:另外:MongoDB集合中的每个顶级文档都必须有一个_id,它充当主键。如果此属性未在代码中设置,则由驱动程序或数据库自动分配。