单独的聚合命令(group,distinct,count)

单独聚合命令
比aggregate性能低,比Map-reduce灵活度低;但是可以节省几行javascript代码,后面那句话我自己加的,哈哈哈~

count()方法可以查询统计符合条件的集合的总数

db.COLLECTION_NAME.count(<query>) // 此方法等价于 db.COLLECTION_NAME.find(<query>).count()

在分布式集合中,会出现计算错误的情况,这个时候推荐使用aggregate;

distinct命令可以找出给定键的所有去重之后的值。使用时也必须指定集合和键

db.runCommand({ distinct: "<collection>", key: "<field>", query: <query> }) //此方法等价于 db.collection.distinct(field, query)

参数说明:

  • collection :要查询的集合的名称
  • key:需要去重的字段的名称
  • query :可选参数,
    指明查询条件,相当于SQL中的where语句

个元素,最多支持20000独立分组;对于超过20000的独立分组建议采用mapreduce;

db.runCommand({

group:

{

ns: <namespace>,

key: <key>,

$reduce: <reduce function>,

$keyf: <key function>,

cond: <query>,

finalize: <finalize function>

}

}) //该方法等价于 db.collection.group({ key, reduce, initial [, keyf] [, cond] [, finalize] })

参数说明

  • ns:集合名称
  • key:用来分组文档的字段。和keyf两者必须有一个
  • keyf:可以接受一个javascript函数。用来动态的确定分组文档的字段。和key两者必须有一个
  • initial:reduce中使用变量的初始化
  • reduce:执行的reduce函数。函数需要返回值。
  • cond:执行过滤的条件。
  • finallize:在reduce执行完成,结果集返回之前对结果集最终执行的函数。可选的。

插入测试数据

for(var i=1; i<20; i++){

var num=i%6;

db.test.insert({_id:i,name:"user_"+i,age:num});

}

普通分组查询

 

db.test.group({

key:{age:true},

initial:{num:0},

$reduce:function(doc,prev){

prev.num++

}

});

db.runCommand({

group: {

ns: "test",

key: {

age: true

},

initial: {

num: 0

},

$reduce: function(doc,

prev){

prev.num++

}

}

});

筛选后分组查询

 

db.test.group({

key: {

age: true

},

initial: {

num: 0

},

$reduce: function(doc,

prev){

prev.num++

},

condition: {

age: {

$gt: 2

}

}

});

db.runCommand({

group: {

ns: "test",

key: {

age: true

},

initial: {

num: 0

},

$reduce: function(doc,

prev){

prev.num++

},

condition: {

age: {

$gt: 2

}

}

}

});

group联合$where查询

 

db.test.group({

key: {

age: true

},

initial: {

num: 0

},

$reduce: function(doc,

prev){

prev.num++

},

condition: {

$where: function(){

returnthis.age>2;

}

}

});

使用函数返回值分组

 

//注意,$keyf指定的函数一定要返回一个对象

db.test.group({

$keyf: function(doc){

return{

age: doc.age

};

},

initial: {

num: 0

},

$reduce: function(doc,

prev){

prev.num++

}

});

db.runCommand({

group: {

ns: "test",

$keyf: function(doc){

return{

age: doc.age

};

},

initial: {

num: 0

},

$reduce: function(doc,

prev){

prev.num++

}

}

});

使用终结器

 

db.test.group({

$keyf: function(doc){

return{

age: doc.age

};

},

initial: {

num: 0

},

$reduce: function(doc,

prev){

prev.num++

},

finalize: function(doc){

doc.count=doc.num;deletedoc.num;

}

});

db.runCommand({

group: {

ns: "test",

$keyf: function(doc){

return{

age: doc.age

};

},

initial: {

num: 0

},

$reduce: function(doc,

prev){

prev.num++

},

finalize: function(doc){

doc.count=doc.num;deletedoc.num;

}

}

});

关系型数据库与MongoDB数据库在一些术语上的对

MongoDB操作符

范例

关系型数据库(mysql)

关系型数据库范例

count()

count({"key":value})或 find({"key":value}).count()

count

select count(1) from table where key=value

distinct

db.runCommand({"distinct":collectionname, "key":"key1",{'key2':value2}}) 或 db.collectionname.distinct("key1",{key2:value2})

distinct

select distinct key1 from table where key2=value2

group

db.test.group({ key:{age:true}, initial:{num:0}, $reduce:function(doc,prev){ prev.num++ }, condition:{$where:function(){ return this.age>2; } } });

group by

select count(1),key1 from table where key2=1 group by key1

MongoDB学习笔记——聚合操作之group,distinct,count的更多相关文章

  1. MongoDB学习笔记——聚合操作之聚合管道(Aggregation Pipeline)

    MongoDB聚合管道 使用聚合管道可以对集合中的文档进行变换和组合. 管道是由一个个功能节点组成的,这些节点用管道操作符来进行表示.聚合管道以一个集合中的所有文档作为开始,然后这些文档从一个操作节点 ...

  2. MongoDB学习笔记——聚合操作之MapReduce

    MapReduce MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,value) ...

  3. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  4. MongoDB学习笔记(数据操作)

    1.  批量插入:     以数组的方式一次插入多个文档可以在单次TCP请求中完成,避免了多次请求中的额外开销.就数据传输量而言,批量插入的数据中仅包含一份消息头,而多次单条插入则会在每次插入数据时封 ...

  5. MongoDB学习笔记——数据库操作

    使用use数据库名称来创建数据库,如果该数据库已经存在则返回这个数据库 语句格式:use DATABASE_NAME >use mynewdb switched to db mynewdb 使用 ...

  6. MongoDB 学习笔记(python操作)

    转自: http://blog.csdn.net/daillo/article/details/7030910

  7. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  8. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  9. 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    mongoDB 学习笔记纯干货(mongoose.增删改查.聚合.索引.连接.备份与恢复.监控等等) http://www.cnblogs.com/bxm0927/p/7159556.html

随机推荐

  1. ActiveMQ学习(二)——MQ的工作原理

    如图所示 首先来看本地通讯的情况,应用程序A和应用程序B运行于同一系统A,它们之间可以借助消息队列技术进行彼此的通讯:应用程序A向队列1发送一条信息,而当应用程序B需要时就可以得到该信息. 其次是远程 ...

  2. const与readonly深度分析(.NET)

    前言 很多.NET的初学者对const和readonly的使用很模糊,本文就const和readonly做一下深度分析,包括: 1. const数据类型的优势 2. const数据类型的劣势 3. r ...

  3. IOS学习笔记之 Socket 编程

    最近开始静心学习IOS编程,虽然起步有点晚,但有句话说的好:“如果想去做,任何时候都不晚”.所以在今天,开始好好学习IOS.(本人之前4年都是搞.Net的,java也培训过一年) 打算学IOS,从哪入 ...

  4. Node.js爬虫抓取数据 -- HTML 实体编码处理办法

    cheerio DOM化并解析的时候 1.假如使用了 .text()方法,则一般不会有html实体编码的问题出现 2.如果使用了 .html()方法,则很多情况下(多数是非英文的时候)都会出现,这时, ...

  5. 安装 Oracle P6 EPPM 16 R1 database for 12C

    . 打开命令提示符(Windows)或 终端(如果UNIX)和连接数据库使用以下命令: sqlplus sys/password@dbservicename as sysdba 连接到: sqlplu ...

  6. Jcrop简单实用

    今天有一个项目的功能需求 “在上传照片的时候能进行裁剪”,网上找了下,发现有Jcrop这款插件,自己试了下,感觉很不错,蛮好用的.又能增加用户体验,测试了兼容性也很好,所以在这里分享下 首先,可以到官 ...

  7. SQLDMOHelper

    在网上传闻SQLDMO是个好东西,当时没有注意这个传闻是什么时候了,后来才在微软的官网上看见,从SQL Server2008开始就不用SQLDMO了,取而代之的是SMO.无奈了,还写了个Helper. ...

  8. 2. npm 的使用

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并 ...

  9. csharp:百度语音识别

    public string API_id = "8888"; //你的ID public string API_record = null; public string API_r ...

  10. 【BZOJ 4326】【NOIP2015】运输计划

    http://www.lydsy.com/JudgeOnline/problem.php?id=4326 题目描述 公元2044年,人类进入了宇宙纪元. 国有个星球,还有条双向航道,每条航道建立在两个 ...