Mongodb Can';I don’与pymongo合作时不允许使用Iskuse

Mongodb Can';I don’与pymongo合作时不允许使用Iskuse,mongodb,aggregation-framework,pymongo,Mongodb,Aggregation Framework,Pymongo,我在使用pymongo进行mongodb聚合时遇到聚合结果超过最大文档大小(16MB)错误 起初,我使用limit()选项克服了这个问题。然而,在某种程度上,我得到了 Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in." error. 好的,我将使用{'allowDiskUse':True}选项。当我在命令行上使用该选项时,该选项起作用,但当我尝试

我在使用pymongo进行mongodb聚合时遇到
聚合结果超过最大文档大小(16MB)
错误

起初,我使用
limit()
选项克服了这个问题。然而,在某种程度上,我得到了

Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in." error.
好的,我将使用
{'allowDiskUse':True}
选项。当我在命令行上使用该选项时,该选项起作用,但当我尝试在python代码中使用该选项时

result = work1.aggregate(pipe, 'allowDiskUse:true')
我得到
TypeError:aggregate()正好接受2个参数(给定3个)
error。(这与:聚合(管道,**kwargs)中给出的定义不同)

我尝试使用runCommand,或者更确切地说,它是pymongo的等价物:

db.command('aggregate','work1',pipe, {'allowDiskUse':True})
但现在我又回到了“聚合结果超过了最大文档大小(16MB)”错误

万一你需要知道

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
    是一种方法。它包含两个位置参数(
    self
    ,隐式传递,
    pipeline
    )和任意数量的关键字参数(必须作为
    foo=bar
    传递——如果没有
    =
    符号,则它不是关键字参数)。这意味着您需要调用
    result=work1.aggregate(pipe,allowDiskUse=True)

  • 关于最大文档大小的错误是Mongo固有的。Mongo无法返回大于16MB的文档(或其数组)。我不能告诉你为什么,因为你既没有给我们你的数据,也没有给我们你的代码,但这可能意味着你最终构建的文档太大了。也许可以尝试降低
    $limit
    参数?首先将它设置为1,运行一个测试,然后增加它,看看这样做的结果有多大


>>工作1.聚合(管道,allowDiskUse=True)。这就成功了,太好了,谢谢you@MaxNoel在添加了
allowDiskUse=True
之后,我再也看不到bson大小16mb的限制问题,但是,我从pymongo方面得到了另一个大小错误:
raise DocumentTooLarge(“命令文档太大”)pymongo.errors.DocumentTooLarge:command document太大
您遇到过这种情况吗?