MongoDB aggregate聚合
admin
2023-04-12 03:22:31
0

aggregate相当于 相当于mysql中的group以及一系列的操作

官网介绍地址:http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/


表达式描述实例
$sum总结从集合中的所有文件所定义的值.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg从所有文档集合中所有给定值计算的平均.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min获取集合中的所有文件中的相应值最小.db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max获取集合中的所有文件中的相应值的最大db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push值插入到一个数组生成文档中.db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet值插入到一个数组中所得到的文档,但不会创建重复.db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first根据分组从源文档中获取的第一个文档。通常情况下,这才有意义,连同以前的一些应用 “$sort”-stage.db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last根据分组从源文档中获取最后的文档。通常,这才有意义,连同以前的一些应用 “$sort”-stage.db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])



相关operators如下:


  • $project: 用于选择从收集的一些具体字段。(别名,显示或者不显示)

  • $match: 这是一个滤波操作,因此可以减少量,作为下一阶段的输入给定的文档。(查询条件)

  • $group: 如上所讨论的,这不实际的聚合。 (需要进行分组的字段,sum等也在这里进行)

  • $sort: 文件排序。(排序)

  • $skip: 与此有可能向前跳过的文件列表中的一个给定的的文档数量。(用于分页)

  • $limit: 这限制了的文档数量看一下由从当前位置开始的给定数(用于分页)

  • $unwind: 这是用来平仓文档的中使用数组。使用数组时,数据是一种pre-joinded,再次有个别文件,此操作将被取消。因此,这个阶段,数量会增加文件的下一阶段。(这个很少使用)




对应java中的操作如下:

BasicDBObject fields = new BasicDBObject("email", 1);
    	  DBObject project = new BasicDBObject("$project", fields );
    	  
    	  
    	  BasicDBObject groupFilters = new BasicDBObject("_id", "$name");
    	  groupFilters.put("sumage", new BasicDBObject("$sum", "$age"));
    	  groupFilters.put("totalage", new BasicDBObject("$avg", "$age"));
          BasicDBObject group = new BasicDBObject("$group", groupFilters);
          
    	  AggregationOutput aggrresult = this.mongoTemplate.getCollection("test").aggregate(matchOpt,project, group);   //如果还有sort,skip等则继续在后面追加
    	  
    	  
    	  //或者可以将所有的operate加入list中,如下
    	  List list = new ArrayList();
    	  list.add(group);
    	  list.add(project );
    	  AggregationOutput aggrresult = this.mongoTemplate.getCollection("test").aggregate(list);    //如此同样可以
    	






相关内容

热门资讯

【第一财经】“天天九州麻将到底... 家人们!今天小编来为大家解答天天九州麻将透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里...
今日重磅消息“盼盼十三水开挂器... 今日重磅消息“盼盼十三水开挂器?”(太坑了原来有挂)您好,盼盼十三水这个游戏其实有挂的,确实是有挂的...
【今日要闻】“新众亿牌九开挂器... 网上科普关于“新众亿牌九有没有挂”话题很是火热,小编也是针对新众亿牌九作*弊开挂的方法以及开挂对应的...
终于明白“哪吒重生可以开挂吗?... 网上科普关于“哪吒重生有没有挂”话题很是火热,小编也是针对哪吒重生作*弊开挂的方法以及开挂对应的知识...
我来教教您“攒劲甘肃麻将怎么装... 您好:攒劲甘肃麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款...
今日重大发现“天天爱蚌埠麻将可... 您好:天天爱蚌埠麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这...
【今日要闻】“白金岛放炮罚怎么... 有 亲,根据资深记者爆料白金岛放炮罚是可以开挂的,确实有挂(咨询软件无需...
重磅消息“桂麻圈到底有挂吗?”... 家人们!今天小编来为大家解答桂麻圈透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很多...
今日重磅消息“神皇牛牛怎么装挂... 有 亲,根据资深记者爆料神皇牛牛是可以开挂的,确实有挂(咨询软件无需打开...
最新引进“游戏茶苑开挂神器?”... 最新引进“游戏茶苑开挂神器?”(透视曝光猫腻)您好,游戏茶苑这个游戏其实有挂的,确实是有挂的,需要了...