如何在mongoDB中利用java处理聚合函数

64次阅读
没有评论

共计 2103 个字符,预计需要花费 6 分钟才能阅读完成。

自动写代码机器人,免费开通

本篇文章给大家分享的是有关如何在 mongoDB 中利用 java 处理聚合函数,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。

需要对 document 中的一个 tweet_list 集合中的一个属性 timestamp_ms 进行排序。组内排序

使用聚合框架,通过 match,unwind,sort 等不同的组件创建一个管道。

类似 mysql 中的多层嵌套子查询。

mongoDB 中 js 代码

db.text.aggregate( // Initial document match (uses index, if a suitable one is available)
 [
 { $match: { _id : ObjectId( 5ca95b4bfb60ec43b5dd0db5)
 }},
 // Expand the scores array into a stream of documents
 { $unwind:  $tweet_list  },
 
 { $match: {
  tweet_list.timestamp_ms :  1451841845660 
 }},
 // Sort in descending order
 { $sort: {
  tweet_list.timestamp_ms : 1
 }}
 ]
)

java 实现此聚合函数

java 中的 Aggregation 类,查询条件的顺序决定结果。

Aggregation agg = Aggregation.newAggregation( Aggregation.match(Criteria.where( _id).is(id)),
 Aggregation.unwind(tweet_list),
 Aggregation.sort(Sort.Direction.ASC, tweet_list.timestamp_ms),
 Aggregation.project(tweet_list.timestamp_ms , tweet_list.text , tweet_list.created_at)
AggregationResults JSONObject  results = mongoTemplate.aggregate(agg,  text , JSONObject.class);
//System.out.println(results +results.getRawResults()); // 获取到的结果是 document
//String res = results.getRawResults();
String json = com.mongodb.util.JSON.serialize(results.getRawResults());
System.out.println(JSON serialized Document:   + json);
JSONObject jso= JSON.parseObject(json);
JSONArray resultss=jso.getJSONArray( results 
System.out.println(resultss);

3. 扩展

管道 pipeline

以下的管道操作符可以按照任意顺序组合在一起使用。每个操作符都会接受一连串文档,对这些文档做了类型转换后,将转换后的文档作为结果传递给下一个操作符。直到最后一个管道操作符,将结果返回给客户端。

筛选 match

尽可能将帅选放在管道的前部。两个原因:

1. 先过滤掉不需要的文档,减少管道的工作量。

2. 如果在 project 和 group 之前执行 match,查询可以用索引。

3. 不能在 match 中使用地理空间操作符

投射 project

类似 select 操作。可以用管道表达式,数学表达式,日期表达式,字符表达式,逻辑表达式等。

分组 group

跟 mysql 中的分组比较像

排序 sort

1 升序 -1 降序

限制 limit

限制结果条数

跳过 skip

丢弃结果中的前 n 个文档

拆分 unwind

把数组中的每个值拆分为单独的文档,例如此问题中需要对一个 document 中的 tweetlist 进行排序,可以使用 unwind 把 tweetlist 中的不同 map 拆分成不同的文档。

结果返回

文档

如何在 mongoDB 中利用 java 处理聚合函数

MapReduce

如果聚合框架中查询语言不能不表达,需要用到 MapReduce。

使用:把问题拆分为多个小问题,把各个小问题发送到不同的机器上,每台机器只负责完成一部分的工作,完成之后,再把零碎的解决方案合并。

步骤:

1. 映射 map:把操作映射到集合中每个文档

2. 洗牌 shuffle:按照键值分组,并将产生的键值组成列表放到对应的键中。

3. 化简 reduce:把列表中的值化简成一个单值,值被返回,继续 shuffle,然后最终每个键的列表只有一个值,即最终结果,

以上就是如何在 mongoDB 中利用 java 处理聚合函数,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2103字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)