mongodb 分组聚合_mongodb 分组聚合查询

news/2024/7/24 5:49:53

使用聚合,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


http://www.niftyadmin.cn/n/621654.html

相关文章

2014,我来了

喜欢快速开始一件事,而不愿意去细细的总结过去。比如现在14年已经来了,13年并没有好好的总结。 一直有一个变态的自豪感 是:我很年轻,还有犯错的机会。 。。。

Element UI 之 Table 树形数据合并行的实现

一、需求说明 Table 内容为树形结构,但需要合并收费项目重复列,具有子项的项目可展开和收起。如图: 二、遇到问题 1、表格数据格式 [{id: 1,name: 篮网,item: 投篮(%),value: Number.parseInt(Math.random() * 100),children: [{id: 311…

python爬虫案例_low版爬虫脚本,Python简单图片爬虫案例

现在很多网站都是异步加载的方式加载数据,大部分都是json数据,如果不知道数据的传递过程,一些参数理不清头绪的话,又想要获取数据,那就比较难搞了,尤其是对于本渣渣级选手而言。目标网址https://www.keysho…

qt qlistview获取选中行的值_Qt入门DirectX11学习之旅(五)文件系统 从工程文件打开自定义格式的Shader...

【闲话开始】本来今天想直接把透视变换加进去的,后来发现如果不很好的组织模型Mesh等各个资源数据到项目后期容易看不明白前面自己写的代码了~所以决定一步一步开始把项目改成一个小小的游戏引擎~先做个简单的文件系统管理下文件吧。。。不然乱糟糟的对于后期的深入…

最新挂载samba文件系统

最新挂载samba文件系统: mount.cifs //192.168.15.2/home /root/tony -hw -o usertony 192.168.15.2  : samba服务器ip地址 home    : 共享文件夹别名 密码     :  Enter后会提示输入对应的samba密码 hw     : 是要挂载到的目录 user…

Android调试底层服务

之前调试过VOLD,调试起来极为麻烦,稍微改一点就要编译整个系统,然后烧写system.img。极为耗时,经过多时经验总结出来了类似调试应用程序的调试方法,高效快速。这里先还以VOLD为例子。…

vue 多个回调_vue多个组件中如何监听vuex中同一个action的回调

vue单页面应用,在整个app入口,需要调用获取用户信息的接口,这个接口只调用一次,怎样能够在多个组件中获取到这个接口完成的通知。app.vueexport default {mounted() {this.userInfo().then(res > {if (res.code 200) {// 具体的操作}});},methods: {...mapState([userInfo]…

程序语言python循环_Python for和while循环

一、自动化测试 直观的来说就是写代码来帮你代替原来的点点点,节省了时间,提高了测试的效率; 录脚本是根据一定的规则生产了代码,这个比较简单,自动化一般是自己写代码:比如用Python、java、ruby、GO等 系统…