Can't get allowDiskUse:True to work with pymongo
我在使用pymongo进行mongodb聚合时遇到了
首先我可以使用
1 | Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in." error. |
好的,我将使用
1 | result = work1.aggregate(pipe, 'allowDiskUse:true') |
我收到
我试图使用runCommand,或者它等效于pymongo:
1 | db.command('aggregate','work1',pipe, {'allowDiskUse':True}) |
但现在我回到"聚合结果超出最大文档大小(16MB)"错误
如果您需要知道
1 | pipe = [{'$project': {'_id': 0, 'summary.trigrams': 1}}, {'$unwind': '$summary'}, {'$unwind': '$summary.trigrams'}, {'$group': {'count': {'$sum': 1}, '_id': '$summary.trigrams'}}, {'$sort': {'count': -1}}, {'$limit': 10000}] |
谢谢
因此,为了:
-
aggregate 是一种方法。 它需要2个位置参数(self (隐式传递和pipeline ))和任意数量的关键字参数(必须作为foo=bar 传递-如果没有= 符号,则不是关键字参数 )。 这意味着您需要调用result = work1.aggregate(pipe, allowDiskUse=True) 。 -
关于最大文档大小的错误是Mongo固有的。 Mongo绝不能返回大于16 MB的文档(或其数组)。 我无法告诉您原因,因为您既没有给我们数据也没有给我们代码,但这可能意味着最终要构建的文档太大。 尝试减小
$limit 参数,也许吗? 首先将其设置为1,运行一个测试,然后增加它并查看当您这样做时结果有多大。