mongodb 分组聚合查询

MongoDB,分组,聚合

使用聚合,db.集合名.aggregate… 而不是find

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

每一个操作符(集合)都会接受一连串的文档,对这些文档做一些类型转换,最后将转换后的文档作为结果传递给下一个操作符,对于最后一个操作符,是将结果返回给客户端

//分组(这里制定了分组字段 $+字段名)
//这里可以理解为,吧lastModifyByUserCode 当作唯一标识 _id,字段count 用 $sum 计算 同一个lastModifyByUserCode出现次数

db.test.aggregate({‘$group‘:{‘_id‘:‘$lastModifyByUserCode‘,‘count‘:{‘$sum‘:1}}})

//根据多个字段分组

db.test.aggregate({$group:{_id:{lastModifyByUserCode:‘$lastModifyByUserCode‘,createTime:‘$createTime‘}}})

//显示其他字段(必须使用聚合[$sum,$avg,$first,$last,$max,$min,$push,$addToSet,$stdDevPop,$stdDevSamp])

db.test.aggregate({‘$group‘:{‘_id‘:‘$lastModifyByUserCode‘,‘count‘:{‘$sum‘:1},‘createTime‘:{‘$first‘:"$createTime"}}})

//投射,可以对字段重命名,可以创建字段副本(注意:在对字段重命名时,MongoDB并不会记录字段的历史名称,因此如果在"orginalfieldname"字段上有一个索引,聚合框架无法在下面的排序操作中使用这个索引,所以,应该尽量在修改字段名称之前使用索引)

db.test.aggregate({$project:{createTime2:‘$createTime‘,createTime3:‘$createTime‘,_id:0}})

$match 用于对文档集合进行筛选,支持find一样的筛选条件,不能在$match中使用地理空间操作符,(尽量把$match放在多个聚合中的第一个,这样可以有效利用索引)

而且根据官方文档,如果在$match使用了全文索引,后面跟着的聚合就不用再使用$text

时间: 2024-10-06 05:03:02

mongodb 分组聚合查询的相关文章

MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

先来张在路上-- 此项目是用Maven创建的,没有使用Maven的,自己百度.谷歌去:直接用Junit测试就行,先执行里面的save方法,添加10000条测试数据提供各种聚合查询等. 废话不多说,上干货-- 一.MongoDB数据库的配置(mongodb.xml) 以下是我自己的配置,红色字体请改为自己本机的东东,你说不懂设置端口,不会创建数据库名称,不会配置用户名密码,那有请查阅本系列的第4节(MongoDB的使用学习之(四)权限设置--用户名.密码.端口==),你说懒得设置,那就@#¥%--

crm使用FetchXml分组聚合查询

/* 创建者:菜刀居士的博客 * 创建日期:2014年07月09号 */ namespace Net.CRM.FetchXml { using System; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Query; /// <summary> /// 使用FetchXml聚合查询,分组依据 /// </summary> public class FetchXmlExtension { /// <summary> /

mongodb高级聚合查询

在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysql复杂很多. 注:本文基于 mongodb v3.6 目录 mongo与mysql聚合类比 aggregate简介 aggregate语法 aggregate常用pipeline stage介绍(本文核心) mongo与mysql聚合类比 为了便于理解,先将常见的mongo的聚合操作和mysql的查询做下类比: SQL 操作/函数

Elasticsearch分组聚合-查询每个A_logtype下有多少数据

Elasticsearch分组聚合 1.查询指定索引下每个A_logtype有多少数据 curl -XPOST 'localhost:19200/ylchou-0-2015-10-07/_search?pretty' -d ' { "size": 0, "aggs": { "group_by_state": { "terms": { "field": "A_logtype" } } }

MongoDB,分组,聚合

使用聚合,db.集合名.aggregate- 而不是find 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数.MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理.管道操作是可以重复的. 每一个操作符(集合)都会接受一连串的文档,对这些文档做一些类型转换,最后将转换后的文档作为结果传递给下一个操作符,对于最后一个操作符,是将结果返回给客户端 //分组(这里制定了分组字段 $+字段名)//这里可以理解为,吧lastModifyBy

Solr分组聚合查询之Facet

摘要: Solr的分组聚合是一个笼统的概念,目的就是把查询结果做分类,有多种方式可以做到很类似的结果.也正是由于它们的不同表现,可以适合于多种场景. 何为Facet Facet是一种手段,用来将搜索结果分类,它并不会修改查询结果信息,只是给分类后的结果加上了每一项的数量值.我们可以用facet来做导航栏,引导用户更精确地查找信息. 一般参数 参数 说明 facet 布尔值,设置为true,表示开启facet facet.query 指定查询语句 facet 布尔值,默认为空,只有设置为true,

C# LinQ 左联接加分组聚合查询

真是醉了,前段时间摸索半天今天一写又忘了,特此写下来备忘,望大婶指点 from a in Table1 join b in Table2 on a.Id equals b.Id2 into e from f in e.DefaultIfEmpty() group new { a.Id1, a.Name, f.id2 } by new { a.Id,//一表的ID a.Name,//一表的字段(Name) f.id2//二表的字段(type) } into c select new Sontype

浅析MySQL使用 GROUP BY 分组聚合与细分聚合

1. 聚合函数(Aggregate Function) MySQL(5.7 ) 官方文档中给出的聚合函数列表(图片)如下: 详情点击https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html . 除非另有说明,否则聚合函数都会忽略空值(NULL values). 2. 聚合函数的使用 聚合函数通常对 GROUP BY 语句进行分组后的每个分组起作用,即,如果在查询语句中不使用 GROUP BY 对结果集分组,则聚合函数就对结果集

solrcloud jsonfacet分组聚合 unique计数不准确

jsonfacet分组聚合查询 unique.hll函数问题: 对不同的值进行估算,并非准确的值, 优点:节省内存消耗,用分组算法对不同的值count进行估算 缺点:无法准确统计count(distinct key) 区别: unique给定字段的惟一值的数量.超过100个值,它不会产生精确的估计,惟一的facet函数是Solr最快速的实现来计算不同值的数量 hll通过超log-log算法的分布式基数估计 记录: json.facet={fz:{type:terms,field:khid,ref