MongoDB、Python和PyMongo:BSONObj size太大的文档大小无效

2024-10-01 17:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

写入Mongo时出现以下错误:

OperationalFailure caught
10334
{u'connectionId': 2365, u'code': 10334, u'ok': 1.0, u'err': u'BSONObj size: 17254820 (0xA4490701) is invalid. Size must be between 0 and 16793600(16MB) First element: 0:

这是一个普通的文档,充满了字符串和整数,用Python构建,但是它的大小似乎是1725mb。你会怎么做?在

数据如下所示:

^{pr2}$

在这个数组中有很多很多元素,但是我很惊讶这个数量超过了16MB。在

在将数组的大小限制为8500个元素之后,我得到了一个PyMongo错误:

$ operator made object too large

Tags: 元素sizeismongo错误codeok数组
2条回答

我的文档太大了,我有一个错误的模式,显然,也请参见:Mongodb update with upsert fails

在设计Mongo模式时,需要考虑很多事情,但是通常模式应该反映出如何使用数据。MongoDB博客上的6 Rules of Thumb for MongoDB Schema Design系列文章是一个良好的开端。在

我的第一个想法是将您的文档“从里到外”存储在一个集合中:

{ date: new Date(1417996800000), owner: "AS3320 Deutsche Telekom AG", ip: "82.148.15.23", views: 844 },
{ date: new Date(1417996800000), owner: "AS29314 VECTRA S.A.", ip: "173.235.42.25", views: 458 },
...

这样你就不会限制你每天可以拥有多少个独特的用户。如果您正在索引date字段,按日期查找访问者仍然是有效的。在

如果您不经常使用owner字段,也许它也可以移动到它自己的集合中。在

^{pr2}$

显然,这可能不是一个明确的答案,但这可能不是一个明确的开始。在

关于在编写文档之前检查文档的大小(我认为这并不是解决糟糕的模式设计的好方法)。MongoDB在内部将数据作为BSON处理,因此您可以使用^{} module

import bson
len(bson.dumps(my_document))

如果出现“operator maked object too large”错误,请参见this question。在

相关问题 更多 >

    热门问题