mongo aggregate 聚合注意事项

mongodb 聚合限制html

限制

使用 aggregate 命令的聚合操做有如下限制:java

  • 管道不能操做一下类型的值: BinarySymbolMinKeyMaxKeyDBRefCode``CodeWScope``。web

  • pipeline 输出只能容纳16兆字节. 若是你的结果集超过此限制, aggregate 命令将生成一个错误。mongodb

  • 若是任何一个聚合操做消耗超过10%的系统RAM,运行中会产生一个错误。app

mongodb中文翻译文档地址:http://mongodb-documentation.readthedocs.org/en/latest/applications/aggregation.html#id23spa

mongodb英文文档地址:https://docs.mongodb.org/ecosystem/tools/munin/命令行

若是超出100兆内存,则Mongodb就会报错:Exceeded memory limit for $group, but not allow enternal sort, put allowDiskUse true翻译

在命令行中是这样的:code

 db.CRM_CSS_REPAIR_ORDER_TABLE.aggregate( [ { $group : { _id : { key1:"$COLUMN_NAME" "key2_date_year":{$year:"$produce_date"}, "key3_date_month":{$month:"$produce_date"} }, count: { $sum: 1 }, min_RECORD_DATE:{$min:'$RECORD_DATE'}, min_purchase_date:{$min:'$purchase_date'} } }, { $sort:{ count:-1 } } ] )

在java类中是这样的:orm

 List<Document> pipeline = Arrays.asList( new Document("$group", new Document( "_id", new Document("MATERIAL_CODE","$MATERIAL_CODE") .append("PROVINCE_NAME","$PROVINCE_NAME") .append("RECORD_DATE_YEAR",new Document("$year","$RECORD_DATE")) .append("RECORD_DATE_MONTH",new Document("$month","$RECORD_DATE")) ) .append("count", new Document("$sum",1)) .append("min_produce_date",new Document("$min","$produce_date")) ) ), new Document("$sort", new Document("count", -1)) ); 

AggregateIterable<Document> iterable = CRM_CSS_REPAIR_ORDER_TABLE_coll.aggregate(pipeline).allowDiskUse(true); 

int i=0; for (Document d : iterable){ i++; Document _id=(Document)d.get("_id"); String ITEM_NUMBER=_id.getString("MATERIAL_CODE"); }

务必加上allowDiskUse,还有其余的,好比

batchSize(int var1)
maxTime(long var1, TimeUnit var3);
useCursor(Boolean var1);
相关文章
相关标签/搜索