原因:mongodb每一个文档默认只有16M。聚合的结果是一个BSON文档,当超过16M大小时,就会报内存不够错误。

exceeded memory limit for $group.but didn't allow external sort.

可以采用打开使用磁盘来解决大小问题。例如

db.flowlog.aggregate([{$group:{_id:"$_id"}}], {allowDiskUse: true})

java代码片段

AggregationOptions options = new AggregationOptions.Builder().allowDiskUse(true).build();Aggregation agg = Aggregation.newAggregation().withOptions(options);

但是如果结果集超过了16M,那么依然会报错误。

采用一个下面的聚合方法

Aggregation agg = Aggregation.newAggregation(Aggregation.group(field1, field2, field3).sum(field4).as("sampleField1").sum(field5).as("sampleField2"),Aggregation.project(field4, field5),new AggregationOperation() { @Overridepublic DBObject toDBObject(AggregationOperationContext context) {return new BasicDBObject("$out", "test");}}).withOptions(options);

mongo.aggregate(agg, sourceCollection, Test.class);

红色部分是重点,构造这个agg可以将得到的结果导入插入到out中,并且不会有16M的限制问题。

如果要在聚合的时候增加一个常量,可采用以下形式

Aggregation agg = Aggregation.newAggregation(Aggregation.group(, OnofflineUserHistoryField.MAC, StalogField.UTC_CODE).sum(OnofflineUserHistoryField.WIFI_UP_DOWN).as(OnofflineUserHistoryField.WIFI_UP_DOWN).sum(OnofflineUserHistoryField.ACTIVE_TIME).as(OnofflineUserHistoryField.ACTIVE_TIME),Aggregation.project("mac","buildingId","utcCode",OnofflineUserHistoryField.ACTIVE_TIME, OnofflineUserHistoryField.WIFI_UP_DOWN).and(new AggregationExpression() {@Overridepublic DBObject toDbObject(AggregationOperationContext context) {return new BasicDBObject("$cond", new Object[]{new BasicDBObject("$eq", new Object[]{ "$tenantId", 0}),20161114,20161114});}}).as("day").andExclude("_id"),            或者

and(new AggregationExpression() {

             @Override

             public DBObject toDbObject(AggregationOperationContext context) {

                return new BasicDBObject("$add", new Object[] { 20141114 });

            }  

             }).as("day").andExclude("_id"),

            new AggregationOperation() { @Overridepublic DBObject toDBObject(AggregationOperationContext context) {return new BasicDBObject("$out", "dayStaInfoTmp");}}).withOptions(options);红色和棕色部分为聚合中增加常量的两种方法。目前没有找到更方便的聚合添加常量的方法。

转载于:https://www.cnblogs.com/guochunyi/p/6030663.html

mongodb聚合内存不足解决方案相关推荐

  1. MongoDB 聚合操作

    MongoDB 聚合操作 在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多 ...

  2. mongodb 聚合框架_如何使用MongoDB的聚合框架处理高级数据处理

    mongodb 聚合框架 MongoDB has come a long way. Even though there are many NoSQL databases out there, Mong ...

  3. MongoDB聚合(二)

    2019独角兽企业重金招聘Python工程师标准>>> MongoDB聚合(二)2.3 $group $group操作可以将文档根据给定字段的不同值进行分组. 如果选定了需要分组的字 ...

  4. MongoDB 聚合管道(Aggregation Pipeline)

    管道概念 POSIX多线程的使用方式中, 有一种很重要的方式-----流水线(亦称为"管道")方式,"数据元素"流串行地被一组线程按顺序执行.它的使用架构可参考 ...

  5. golang mongodb 聚合(Aggregate) github.com/qiniu/qmgo框架

    项目场景: 最近使用golang 来访问mongodb 出了点问题 github.com/qiniu/qmgo对于数据聚合踩了坑 官方的demo给的太少没有多分支的场景 问题描述: 网上对于golan ...

  6. MongoDB聚合(一)

    2019独角兽企业重金招聘Python工程师标准>>> MongoDB聚合(一) 聚合框架 mapreduce 命令:count,distinct,group1. 聚合框架 使用聚合 ...

  7. MongoDB聚合查询 Pipeline 和 MapReduce

    MongoDB聚合查询 MongoDB聚合查询 什么是聚合查询 Pipeline聚合管道方法 聚合流程 详细流程 聚合语法 常用聚合管道 $count $group $match $unwind $p ...

  8. vue2打包时内存溢出解决方案

    vue2打包时内存溢出解决方案 参考文章: (1)vue2打包时内存溢出解决方案 (2)https://www.cnblogs.com/ZT0219/p/7872258.html 备忘一下.

  9. docker启动elasticsearch失败--jvm内存不足解决方案

    docker启动elasticsearch失败--jvm内存不足解决方案 参考文章: (1)docker启动elasticsearch失败--jvm内存不足解决方案 (2)https://www.cn ...

  10. mongodb 对内存的占用监控 ——mongostat,linux系统可用的内存是free + buffers + cached...

    刚开始使用mongodb的时候,不太注意mongodb的内存使用,但通过查资料发现mongodb对内存的占用是巨大的,在本地测试服务器中,8G的内存居然被占用了45%.汗呀.  本文就来剖析一下mon ...

最新文章

  1. sublime Text3快捷键使用大全
  2. bootstrap ui
  3. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 查找 DexFile 对应的C代码 | dalvik_system_DexFile.cpp 分析 )
  4. jquery实现截取pc图片_jquery实现图片裁剪思路及实现
  5. 【论文解读】NN如何在表格数据中战胜GBDT类模型!
  6. 关于静态成员变量的谈论
  7. 【待完善】【表达学习】稀疏表达SRC方法研究
  8. 完美解决html中select的option不能隐藏的问题。
  9. 基于Modelica的起落架摆震建模
  10. 乐吾乐 Topology 全新优化1.0已经内测啦
  11. 搭建无iDP证书的Xcode环境
  12. conda安装requirement.txt指定的依赖包
  13. 前端常用PS技巧总结之更换图片背景图片
  14. Windows系统封装步骤
  15. 全国计算机二级ms备考,全国计算机二级MS office经验分享
  16. SDU程序设计思维Week5-作业 B-TT's Magic Cat
  17. redis中存集合_如何在Redis中管理集合
  18. UG三轴产品编程3D图档-刀路图档550例
  19. Python,江湖救急
  20. BigGAN代码解读(gpt3.5的帮助)——谱正则化部分

热门文章

  1. 有监督的神经网络模型
  2. MySQL进阶路:从小工到专家的必读书籍和必备工具
  3. eclipse里启动rabbitmq报错 java.net.SocketException: Connection reset
  4. 安装jenkins环境之jdk8
  5. CSS3中的过渡、动画和变换
  6. [转]非模态对话框的特点与使用
  7. Qt平台下使用QJson解析和构建JSON字符串
  8. 2.4 使用ARDUINO控制MC20进行GPS数据的获取和解析
  9. meta 标签的作用
  10. 17082 两个有序数序列中找第k小