MongoDB分组
- group(先筛选再分组,不支持分片,对数据量有所限制,效率不高) 【简单分组实测150W 12.5s】
 - mapreduce(基于js引擎,单线程执行,效率较低,适合用做后台统计等) 【简单分组实测150W 28.5s】
 - aggregate(推荐) (性能要高很多,并且使用上要简单些) 【简单分组实测150W 2.6s】
 
db.ad_play_log.group({
    // https://docs.mongodb.org/manual/reference/method/db.collection.group/
    // https://docs.mongodb.org/manual/reference/command/group/#dbcmd.group
    key: {
        // 分组的字段
        ad_position_id: 1
    },
    cond: {
        // WHERE条件
        ord_dt: {
            $gt: new Date('01/01/2012')
        }
    },
    reduce: function (curr, result) {
        result.count++;
    },
    initial: {
        count: 0
    }
});
// SELECT ad_play_log, SUM(material_id) as total
// FROM orders
// WHERE ord_dt > '01/01/2012'
// GROUP BY ad_position_id
MapReduce
db.runCommand({
    mapreduce: "ad_play_log",
    map: function Map() {
        var key = {
            ad_position_id: this.ad_position_id
        };
        var value = {
            count: 1
        };
        /**
         * key value 传给reduce函数处理
;
        }
        return ret;
    },
    out: {
        inline: 1
    }
});
have used GROUP BY in SQL, map/reduce is the right tool in MongoDB.
Aggregate
db.ad_play_log.aggregate(
{
}}
}
// == SELECT ad_position_id,count(1) AS count FROM ad_play_log GROUP BY ad_position_id
);
Java代码实现:
| 
 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
 | 
public void test_aggregate() {        MongoCollection<Document> collection = MongoUtil.getCollection("ad_play_log");        AggregateIterable<Document> iterable = collection.aggregate(asList(new Document("$group",                new Document("_id", "$ad_position_id").append("count", new Document("$sum", 1)))));        iterable.forEach(new Block<Document>() {            @Override            public void apply(final Document document) {                System.out.println(document.toJson());            }        });    } | 
统计aggregate的行数
- Use 
$projectto
savetagandcountintotmp - Use 
$pushoraddToSetto
storetmpinto yourdatalist. 
Code:
}, data:{$addToSet:'$tmp'}}})
Output:
}
MongoDB分组的更多相关文章
- MongoDB分组汇总操作,及Spring data mongo的实现
		
转载请在页首注明作者与出处 一:分组汇总 1.1:SQL样例 分组汇总的应用场景非常多,比如查询每个班级的总分是多少,如果用关系形数据库,那么sql是这样子的 ),class from score g ...
 - mongodb 分组查询
		
数据的保存 include_once 'mDB.class.php'; $m=new mDB(); $m->setDB('mydb'); // $m->save('stu',['dept' ...
 - mongodb分组,的两种方式,先记一下
		
using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using NationalUnion.AdGalle ...
 - C#  操作mongodb 分组
		
c#操作mongodb的分组的简单例子: 1.首先要下载c#对应的mongodb驱动,官方下载地址:https://github.com/mongodb/mongo-csharp-driver/rel ...
 - MongoDB,分组,聚合
		
使用聚合,db.集合名.aggregate- 而不是find 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数.MongoDB的聚合管道将MongoDB文档在一个管道处理完 ...
 - MongoDB分组查询,聚合查询,以及复杂查询
		
准备数据 from pymongo import MongoClient import datetime client=MongoClient('mongodb://localhost:27017') ...
 - mongodb分组排序
		
@Override public MessageDto getCheckInMembersByFlight(String fltDt, String fltNr, String channel,Str ...
 - mongodb分组函数的使用(spring-data-mongodb)
		
这两天要做mongodb日志的模块,下面记录一下. 一. 首先要导入一批数据,使用springboot来完成. 配置mongodb的复制集:在application.yml文件中配置uri来完成 格式 ...
 - mongoDB 分组并对分组结果筛选类似于SQL中的(group by xxx having ) 附带Java代码
		
今天需要做一个筛选程序,因为数据放在mongodb中,没写过分组的查询语句,查了一些资料,终于写出来了,分享给各位小伙伴 需求是 查询 学员 在2019-07-29之后未同步的数据(同一个学员需要2条 ...
 
随机推荐
- Linux 在线模拟器
			
最近在学习Linux的一些命令的使用,但是很久之前装的Linux虚拟机被删掉了,又不想为了练习几个命令折腾一遍虚拟机.所以,就尝试地搜了一下,看看有没有在线的Linux模拟器可以使用,只要可以练习一下 ...
 - struts框架从.jsp页面直接访问action
			
<%@ page language="java" pageEncoding="UTF-8"%><%String path = request. ...
 - pentaho cde 自定义复选下拉框 checkbox select
			
pentaho 自带的component 虽多,但是当用户需要在一个表格中查看多个组别的数据时,pentaho自带的单选框就不能实现了,所以复选下拉框势在必行,实现效果如下: 实现原理是借用了jqu ...
 - Node.js 实用工具
			
稳定性: 4 - 锁定 这些函数都在'util' 模块里.使用 require('util') 来访问他们. util 模块原先设计的初衷是用来支持 node 的内部 API 的.这里的很多的函数对你 ...
 - Cloudera: Start Impala service by cloudera manager in docker quickstart image
			
How to start Impala service in docker quickstart image docker run --hostname=quickstart.cloudera --p ...
 - 20160218.CCPP体系详解(0028天)
			
程序片段(01):加法.c 内容概要:字符串计算表达式 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <st ...
 - 理解性能的奥秘——应用程序中慢,SSMS中快(4)——收集解决参数嗅探问题的信息
			
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(3)--不总是参数嗅探的错 前面已经提到过关于存储过程在SSMS中运行很 ...
 - Android Studio下多渠道打包
			
Android Studio下实现多渠道打包 直接上步骤 步骤 1. 清单文件添加属性(以友盟统计为例) 在application标签下添加meta-data属性 <application -- ...
 - 22 Notification 通知栏代码
			
结构图: MainActivity.java package com.qf.day22_notification; import android.app.Activity; import androi ...
 - Unity插件 - MeshEditor(七)变形动画骨骼及蒙皮
			
MeshAnimation在物体的顶点比较多的情况下,悲剧是显而可见的,我一个一个的点选顶点肯定得累死,而且对于形态的调控不是很方便,应该说是很麻烦,要知道,骨骼动画因为有了骨骼以及蒙皮信息而有了灵魂 ...