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在物体的顶点比较多的情况下,悲剧是显而可见的,我一个一个的点选顶点肯定得累死,而且对于形态的调控不是很方便,应该说是很麻烦,要知道,骨骼动画因为有了骨骼以及蒙皮信息而有了灵魂 ...