Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in.

python 调用mongo aggregate函数 提示错误:pymongo.errors.OperationFailure: Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in.

本地环境:

python2.7_32

MongoDB version:3.2.5

报错原因:

mongo内存限制。 aggregate函数 使用$group时,数据大小必须小于16945KB。

解决方法:

添加设置:allowDiskUse:true

在mongo中修改,如下例:

db.stocks.aggregate( [
      { $project : { cusip: 1, date: 1, price: 1, _id: 0 } },
      { $sort : { cusip : 1, date: 1 } }
   ],
   { allowDiskUse: true }
)

在python中修改,如下例:(两种方式)

方式一:

pipeline = [{"$group": {"_id": {"uid": "$uid"}, "number"{"$sum": 1}}}]
options = {'allowDiskUse':True}
queryList = rawTable.aggregate(pipeline, **options)
 
 
方式二:
queryList = rawTable.aggregate([{"$group": {"_id": {"uid": "$uid"}, "number"{"$sum": 1}}}], allowDiskUse=True)
 
 
 
 
 
 
注意:方式一中,参数options,前需加“**”,否则报--> TypeError: aggregate() takes exactly 2 arguments (3 given)


参考mongo中文社区:http://docs.mongoing.com/manual-zh/reference/command/aggregate.html#dbcmd.aggregate



  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值