在 MongoDb 中,ObjectId 是一个 12 字节的 BSON 类型。
有什么办法可以减小objectID的大小吗?
不,它是 BSON 数据类型。这就像要求一个 32 位整数收缩自身。每个对象都必须具有_id属性,但您不限于ObjectId
.
MongoDB 集合中的每个文档都需要具有唯一性_id
,但值不必是ObjectId
. 因此,如果您希望减少集合中文档的大小,您有两种选择:
选择文档的独特属性之一并将其用作_id
字段。例如,如果您有一个帐户集合,其中帐户 ID(外部提供)是您的数据模型的一部分,您可以将帐户 ID 存储在_id
字段中。
自己管理集合的主键。许多驱动程序支持自定义主键工厂。正如@assylias 所建议的那样,使用 int 可以节省大量空间,但是,与将模型中的某个字段用作_id
.
顺便说一句,_id
字段的值可以是复合的:您可以使用 Object/hash/map/dictionary。例如,参见这个 SO question。
如果您在 Mongo 之上使用某种类型的对象/模型框架,我会小心 (1)。有些框架很难让开发人员覆盖 id 生成。例如,我在 Ruby 中使用 Mongoid 的体验很糟糕。在这种情况下,(2) 可能是更安全的方法,因为生成发生在驱动程序层。