文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

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

需要对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处理聚合函数,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯