[MongoDB]聚集命令

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52304545 1.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52304545

1. 使用count()函数返回文档的数目

函数count()将返回集合中文档数目:

> db.Book.count();
2

还可以执行额外的过滤,结合条件操作符使用count():

> db.Book.find({"author":"丁雪丰"});
{ "_id" : ObjectId("57bc51df521d776dc5921dfd"), "title" : "MongoDB实战", "author" : "丁雪丰", "year" : "2012-10", "price" : 59 }
> 
> 
> db.Book.find({"author":"丁雪丰"}).count();
1

上面例子中只返回作者为"丁雪丰"的文档数目。

备注

count()函数默认将忽略skip()和limit()参数。为了保证skip()和limit()参数的有效性,请使用count(true):

> db.Book.find().limit(1).count();
2
> db.Book.find().limit(1).count(true);
1

2. 使用distinct()函数获取唯一值

如果集合中有很多本书(例如,实体书和电子书)含有相同标题,那么从技术上讲,其实集合中只有一本书。这时就用到distinct()函数:将返回一个唯一值。

为了演示我们在集合中添加一个电子书:

> db.Book.insert({"title" : "MongoDB实战", "author" : "丁雪丰", "year" : "2012-10", "price" : 12, "type": "e-book"});
WriteResult({ "nInserted" : 1 })

这时,集合中将含有两本相同标题的图书。在集合上使用distinct函数,结果只会显示两个唯一值:

> db.Book.distinct("title");
[ "MongoDB : The Definitive Guide", "MongoDB实战" ]

3. 结果分组

MongoDB的group函数类似于SQL中的GROUOP BY子句。该命令的目的是返回一个已分组元素的数组。函数group()将接收三个参数:key , initial 和 reduce。

参数key指定希望使用哪个键对结果进行分组;参数initial允许每个已分组的结果提供基数(元素开始统计的起始基数);参数reduce接受两个参数:正在遍历的当前文档和聚集对象。

先看一下集合中的文档:

> db.Book.find();
{ "_id" : ObjectId("57bbd6b2521d77442c8b9055"), "title" : "MongoDB Definitive Guide", "author" : "Kristina Chodorow", "year" : "2010-9-24", "price" : 39.99 }
{ "_id" : ObjectId("57bc51df521d776dc5921dfd"), "title" : "MongoDB实战", "author" : "丁雪丰", "year" : "2012-10", "price" : 59 }
{ "_id" : ObjectId("57bd315ffe1a4529639146a5"), "title" : "MongoDB实战", "author" : "丁雪丰", "year" : "2012-10", "price" : 12, "type" : "e-book" }
{ "_id" : ObjectId("57bda7e2fe1a4529639146a6"), "title" : "MongoDB实战2", "author" : "丁雪丰", "year" : "2013-10", "price" : 15, "type" : "e-book" }

我们可以看到有三本书是"丁雪丰"写的,我们的目的就是以作者进行分组:

> db.Book.group({key:{author:true},initial:{Total:0},reduce: function(items, prev){prev.Total += 1;}})
[
	{
		"author" : "Kristina Chodorow",
		"Total" : 1
	},
	{
		"author" : "丁雪丰",
		"Total" : 3
	}
]

我们统计的结果是有三本书的作者是"丁雪丰",有一本书的作者是"Kristina Chodorow"。参数initial设置了元素开始统计的起始基数Total,假设我们设置起始基数为1:

> db.Book.group({key:{author:true},initial:{Total:1},reduce: function(items, prev){prev.Total += 1;}})
[
	{
		"author" : "Kristina Chodorow",
		"Total" : 2
	},
	{
		"author" : "丁雪丰",
		"Total" : 4
	}
]

reduce参数在遇到每一个匹配项时都会进行统计,这里我们设置prev.Total += 1 即每遇到一个匹配项都会将总数加1。我们也可以设置每遇到一个匹配项加2:

> db.Book.group({key:{author:true},initial:{Total:0},reduce: function(items, prev){prev.Total += 2;}})
[
	{
		"author" : "Kristina Chodorow",
		"Total" : 2
	},
	{
		"author" : "丁雪丰",
		"Total" : 6
	}
]


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
10月前
|
存储 JSON NoSQL
3-MongoDB常用命令
MongoDB常用命令
241 2
|
NoSQL 数据可视化 关系型数据库
mongoDB入门教程三:数据库的创建和删除(增删改查)基本命令
mongoDB入门教程三:数据库的创建和删除(增删改查)基本命令
213 0
|
存储 JSON NoSQL
数据库系列课程(22)-MongoDB 常用命令
数据库系列课程(22)-MongoDB 常用命令
300 0
|
4月前
|
存储 JSON NoSQL
MongoDB常用命令
MongoDB常用命令
54 1
MongoDB常用命令
|
5月前
|
NoSQL MongoDB 数据库
MongoDB是一个NoSQL数据库,有着多种不同的命令和操作。以下是一些常见的MongoDB命令:
一些常用的MongoDB命令,如数据库和集合的管理、数据的插入、查询、更新、删除以及聚合操作等。
58 1
|
6月前
|
SQL NoSQL 安全
MongoDB命令汇总
这篇文章提供了一个MongoDB命令的汇总,包括数据库操作、DDL和DML命令、安全管理、数据备份恢复、远程连接管理和聚合操作等。
109 2
|
7月前
|
存储 JSON NoSQL
3-MongoDB常用命令
本文档介绍MongoDB中关于文章评论数据的操作命令。首先定义了一个名为`articledb`的数据库及评论数据结构,包括评论ID、文章ID、内容、用户ID、昵称、创建时间、点赞数、状态等字段。随后详细讲解了数据库与集合的创建、选择、删除等基础操作,并提供了具体示例。此外,还介绍了文档的增删改查等基本CRUD操作,包括单个文档和批量文档的插入、查询、更新和删除的方法及参数说明。文档进一步解释了如何进行投影查询、批量更新以及使用`$inc`运算符来增量更新数值字段。最后,讲解了如何进行分页查询和排序操作,帮助用户高效管理大量评论数据。
|
8月前
|
JSON NoSQL 关系型数据库
MongoDB常用命令大全,概述、备份恢复
MongoDB常用命令大全:服务启动停止、查看状态、备份;数据库相关,集合操作,文档操作,其他常用命令;数据备份恢复/导入导出——mongodump、mongorestore;MongoDB与SQL比较
|
8月前
|
JSON NoSQL MongoDB
mongodb 系统命令总结
mongodb 系统命令总结
75 0
|
8月前
|
存储 NoSQL 关系型数据库
MongoDB基本命令
MongoDB基本命令
77 0