Mongodb 更改Objectid的大小

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(外部提供)是数据模型的一部分,则可以将

在MongoDb中,ObjectId是一个12字节的BSON类型


有没有办法减小objectID的大小?

没有。它是BSON数据类型。这就像要求一个32位整数收缩自己。
每个对象都必须具有\u id属性,但您不限于
ObjectId

MongoDB集合中的每个文档都需要具有唯一的
\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,它充当主键。如果此属性未在代码中设置,则由驱动程序或数据库自动分配。