无法获得allowDiskUse:True可以与pymongo一起使用

 郭彩凤da 发布于 2022-12-07 20:38

我正在aggregation result exceeds maximum document size (16MB)使用pymongo进行mongodb聚合的错误.

我首先使用该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() takes exactly 2 arguments (3 given)错误.(尽管在http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.aggregate:aggregate(pipeline,** 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}]

谢谢

1 个回答
  • 所以,按顺序:

    aggregate是一种方法.它需要2个位置参数(self隐式传递,和pipeline)和任意数量的关键字参数(必须传递foo=bar- 如果没有=符号,它不是关键字参数).这意味着你需要打电话result = work1.aggregate(pipe, allowDiskUse=True).

    关于最大文档大小的错误是Mongo固有的.Mongo永远不会返回大于16兆字节的文档(或其数组).我不能告诉你为什么,因为你既没有给你我们的数据也没有给你我们的代码,但这可能意味着你作为最终结果建立的文件太大了.尝试减少$limit参数,也许?首先将其设置为1,运行测试,然后增加测试,并查看执行此操作时结果的大小.

    2022-12-11 02:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有