一个mongodb数组字段可以保存多少个BSON ObjectId

How many BSON ObjectIds can a mongodb array field save

我打算在此数组中为外键 ID 保存大量 ID。所以,我只是检查我可以在字段数组中保存的最大 BSON::ObjectIds 数量。比方说

department_ids: [BSON::OBjectId('57cf6d6e8315292136000001'), BSON::OBjectId('57cf6d6e8315292136000002') ...... ]

2021 年 7 月 1 日编辑

由于包含数组的文档不能超过 16 兆字节,数组中的对象数量是有限的。

其他答案解释了如何计算。

MongoDB Limits and Thresholds

monogdb 的文档中没有提到这样的限制,但是 javascript 数组最多可以有 2^32-1 = 4,294,967,295 = 42.9 亿个元素.

并且mongodb文档最多可以有16MB。

每个 ObjectID 使用 12 个字节,如果限制为 16 MB,则每个文档的数组中可以有大约 1398101 个 objectID。

也许是 DBRefs could help you, or you could use a GridFS 合集。

如果可以避免连接,那将是 mongo 上的最佳解决方案。

16MB 足以容纳大量的 ObjectId,ObjectId 并没有那么重,它们有 12 个字节,当您将它除以 16MB 时,您会得到远远超过 100 万。

但如果您仍然不放心,您可以受益于 Mongo 灵活的模式设计并创建一个后续文档来保存更多数组并将该文档的 _id 存储在相关的带有名为 "followedBy" 或其他名称的字段的文档。

缺点是您将不得不执行后续查询(或者可能不需要)。

希望对您有所帮助。