共计 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 拆分成不同的文档。
结果返回
文档
MapReduce
如果聚合框架中查询语言不能不表达,需要用到 MapReduce。
使用:把问题拆分为多个小问题,把各个小问题发送到不同的机器上,每台机器只负责完成一部分的工作,完成之后,再把零碎的解决方案合并。
步骤:
1. 映射 map:把操作映射到集合中每个文档
2. 洗牌 shuffle:按照键值分组,并将产生的键值组成列表放到对应的键中。
3. 化简 reduce:把列表中的值化简成一个单值,值被返回,继续 shuffle,然后最终每个键的列表只有一个值,即最终结果,
以上就是如何在 mongoDB 中利用 java 处理聚合函数,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。
向 AI 问一下细节