Java / MongoDB-如何实现聚合方法以将结果作为游标返回
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java / MongoDB-如何实现聚合方法以将结果作为游标返回,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2814字,纯文字阅读大概需要5分钟。
内容图文
![Java / MongoDB-如何实现聚合方法以将结果作为游标返回](/upload/InfoBanner/zyjiaocheng/882/fe585563ed394ae2aca951b432ee59e9.jpg)
我面临以下问题
com.mongodb.CommandFailureException: { "serverUsed" : "127.0.0.1:15847" , "errmsg" : "exception: aggregation result exceeds maximum document size (16MB)" , "code" : 16389 , "ok" : 0.0}
谷歌搜索后,我发现一些解决方法,例如使用以下代码
> {“ $out”:“ temp_colls”);
> useCursor =真
第一个正在为我工??作,但是它花费了大约3-4分钟的太多时间.
所以寻找下面我尝试过的第二种选择
原始代码是
dbObjArray = new BasicDBObject[2]
dbObjArray[0]= cruxLevel
dbObjArray[1] = project
List<DBObject> pipeline = Arrays.asList(dbObjArray)
if (!datasetObject?.isFlat && jsonFor != 'collection-grid') {
output= dataSetCollection.aggregate(pipeline)
}else{
output= dataSetCollection.aggregate(project)
}
output.results().eachWithIndex{list,index->
dataList.add(output.results()[index])
我在下面尝试过在游标中获取结果.
1.
// Assuming MongoCollection
dataSetCollection.aggregate(pipeline).useCursor(true)
您可能还需要告诉它使用服务器上的磁盘空间,而不是全部在内存中完成:
2.
// Assuming MongoCollection
dataSetCollection.aggregate(pipeline).useCursor(true).allowDiskUse(true)
如果您使用的是旧版驱动程序(或新版驱动程序中的旧API),则这两个选项将如下所示:
3.
// Assuming DBCollection
dataSetCollection.aggregate(pipeline, AggregationOptions.builder().allowDiskUse(true)
.useCursor(true)
.build())
.useCursor(true)
和
output= dataSetCollection.aggregate(project).newAggregationOptions().outputMode(AggregationOptions.OutputMode.CURSOR).build()
以错误为例
对于“输出= dataSetCollection.aggregate(项目).useCursor(true)”
groovy.lang.MissingMethodException: No signature of method: com.mongodb.AggregationOutput.useCursor() is applicable for argument types: (java.lang.Boolean) values: [true]
对于“输出= dataSetCollection.aggregate(项目).useCursor(true).allowDiskUse(true)”
groovy.lang.MissingMethodException: No signature of method: com.mongodb.AggregationOutput.useCursor() is applicable for argument types: (java.lang.Boolean) values: [true]
对于“输出= dataSetCollection.aggregate(project,AggregationOptions.builder()
.allowDiskUse(true)
.useCursor(真实)
.建立())
.useCursor(true)”
groovy.lang.MissingPropertyException: No such property: AggregationOptions for class: com.acumetric.hrat.aggregator.DataImportService
最后一个.
groovy.lang.MissingMethodException: No signature of method: com.mongodb.AggregationOutput.newAggregationOptions() is applicable for argument types: () values: []
什么都没用.我要去哪里了,请帮忙!
谢谢.
解决方法:
在else块下面的代码中
def dbObjArray = new BasicDBObject[1]
dbObjArray[0]= project
List<DBObject> flatPipeline = Arrays.asList(dbObjArray)
AggregationOptions aggregationOptions = AggregationOptions.builder()
.batchSize(100)
.outputMode(AggregationOptions.OutputMode.CURSOR)
.allowDiskUse(true)
.build();
def cursor = dataSetCollection.aggregate(flatPipeline,aggregationOptions)
内容总结
以上是互联网集市为您收集整理的Java / MongoDB-如何实现聚合方法以将结果作为游标返回全部内容,希望文章能够帮你解决Java / MongoDB-如何实现聚合方法以将结果作为游标返回所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。