学堂 学堂 学堂公众号手机端

MongoDB内存不足怎么情况,怎么解决

lewis 1年前 (2024-03-12) 阅读数 4 #技术
这篇文章主要介绍“MongoDB内存不足怎么情况,怎么解决”的相关知识,下面会通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MongoDB内存不足怎么情况,怎么解决”文章能帮助大家解决问题。


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

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

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

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

java代码片段

AggregationOptionsoptions=newAggregationOptions.Builder().allowDiskUse(true).build();

Aggregationagg=Aggregation.newAggregation().withOptions(options);

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

采用一个下面的聚合方法

Aggregationagg=Aggregation.newAggregation(
Aggregation.group(field1
,field2
,field3)
.sum(field4).as("sampleField1")
.sum(field5).as("sampleField2"),
Aggregation.project(field4,field5),
newAggregationOperation(){
@Override
publicDBObjecttoDBObject(AggregationOperationContextcontext){
returnnewBasicDBObject("$out","test");
}
}).withOptions(options);
mongo.aggregate(agg,sourceCollection,Test.class);

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

Aggregationagg=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(
newAggregationExpression(){
@Override
publicDBObjecttoDbObject(AggregationOperationContextcontext){
returnnewBasicDBObject(
"$cond",newObject[]{
newBasicDBObject(
"$eq",newObject[]{"$tenantId",0}
),
20161114,
20161114
});
}
}).as("day").andExclude("_id"),            或者
and(newAggregationExpression(){
             @Override
             publicDBObjecttoDbObject(AggregationOperationContextcontext){

                returnnewBasicDBObject("$add",newObject[]{20141114});
            }

             }).as("day").andExclude("_id"),
            newAggregationOperation(){
@Override
publicDBObjecttoDBObject(AggregationOperationContextcontext){
returnnewBasicDBObject("$out","dayStaInfoTmp");
}
}).withOptions(options);

以上就是关于“MongoDB内存不足怎么情况,怎么解决”的介绍了,感谢各位的阅读,如果大家想要了解更多相关的内容,欢迎关注博信,小编每天都会为大家更新不同的知识。
版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门