十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇文章给大家分享的是有关如何在MongoDB中利用java处理聚合函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
成都创新互联公司云计算的互联网服务提供商,拥有超过13年的服务器租用、资阳主机托管、云服务器、虚拟空间、网站系统开发经验,已先后获得国家工业和信息化部颁发的互联网数据中心业务许可证。专业提供云主机、虚拟空间、国际域名空间、VPS主机、云服务器、香港云服务器、免备案服务器等。
需要对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") ); AggregationResultsresults = 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处理聚合函数,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。