[MongoDB]聚集命令

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 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
	}
]


目录
相关文章
|
11月前
|
NoSQL MongoDB 微服务
微服务——MongoDB常用命令——文档的分页查询
本文介绍了文档分页查询的相关内容,包括统计查询、分页列表查询和排序查询。统计查询使用 `count()` 方法获取记录总数或按条件统计;分页查询通过 `limit()` 和 `skip()` 方法实现,控制返回和跳过的数据量;排序查询利用 `sort()` 方法,按指定字段升序(1)或降序(-1)排列。同时提示,`skip()`、`limit()` 和 `sort()` 的执行顺序与编写顺序无关,优先级为 `sort()` > `skip()` > `limit()`。
394 1
|
11月前
|
JSON NoSQL MongoDB
微服务——MongoDB常用命令——文档基本CRUD
本文介绍了MongoDB中文档的基本操作,包括插入、查询、更新和删除。单个文档插入使用`insert()`或`save()`方法,批量插入用`insertMany()`。查询所有文档用`find()`,条件查询可在`find()`中添加参数,投影查询控制返回字段。更新文档通过`update()`实现,支持覆盖修改、局部修改(使用`$set`)和批量修改。列值增长可用`$inc`实现。删除文档用`remove()`,需谨慎操作以免误删数据。此外,文档键值对有序,区分大小写,不能有重复键。
254 1
|
11月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令——MongoDB索引知识概述
本文介绍MongoDB索引相关知识,包括其在查询中的重要作用。索引可避免全集合扫描,显著提升查询效率,尤其在处理海量数据时。通过B树数据结构存储字段值并排序,支持相等匹配、范围查询及排序操作。文中还提供了官方文档链接以供深入学习。
193 0
|
11月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令——MongoDB索引的类型
本节介绍了MongoDB中索引的几种类型及其特点。包括单字段索引,支持升序/降序排序,索引顺序对操作无影响;复合索引,字段顺序重要,可实现多级排序;地理空间索引,支持平面与球面几何查询;文本索引,用于字符串搜索并存储词根;哈希索引,基于字段值散列,适合等值匹配但不支持范围查询。
265 1
微服务——MongoDB常用命令——MongoDB索引的类型
|
11月前
|
存储 JSON NoSQL
MongoDB常用命令
本文介绍了将文章评论数据存储到MongoDB中的操作方法,包括数据库和集合的基本操作。主要内容涵盖:选择与创建数据库(如`articledb`)、数据库删除、集合的显式与隐式创建及删除、文档的CRUD操作(插入、查询、更新、删除)。此外,还详细说明了分页查询、排序查询以及统计查询的方法,例如使用`limit()`、`skip()`实现分页,`sort()`进行排序,`count()`统计记录数。通过实例展示了如何高效管理MongoDB中的数据。
|
11月前
|
NoSQL 关系型数据库 MongoDB
微服务——MongoDB常用命令——集合操作
本节主要介绍MongoDB中的集合操作,包括显式与隐式创建集合的方法。显式创建使用`db.createCollection(name)`,需遵循命名规范(如不能以"system."开头或包含`\0`字符)。隐式创建则通过直接向不存在的集合插入文档实现,更为常用。此外,还介绍了集合删除方法`db.collection.drop()`及其返回值规则,帮助用户管理数据库中的集合资源。
433 0
|
11月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令1——数据库操作
本节介绍了 MongoDB 中数据库的选择、创建与删除操作。使用 `use 数据库名称` 可选择或创建数据库,若数据库不存在则自动创建。通过 `show dbs` 或 `show databases` 查看所有可访问的数据库,用 `db` 命令查看当前数据库。注意,集合仅在插入数据后才会真正创建。数据库命名需遵循 UTF-8 格式,避免特殊字符,长度不超过 64 字节,且部分名称如 `admin`、`local` 和 `config` 为系统保留。删除数据库可通过 `db.dropDatabase()` 实现,主要用于移除已持久化的数据库。
707 0
|
存储 JSON NoSQL
MongoDB常用命令
MongoDB常用命令
134 1
MongoDB常用命令
|
NoSQL MongoDB 数据库
MongoDB是一个NoSQL数据库,有着多种不同的命令和操作。以下是一些常见的MongoDB命令:
一些常用的MongoDB命令,如数据库和集合的管理、数据的插入、查询、更新、删除以及聚合操作等。
201 1
|
SQL NoSQL 安全
MongoDB命令汇总
这篇文章提供了一个MongoDB命令的汇总,包括数据库操作、DDL和DML命令、安全管理、数据备份恢复、远程连接管理和聚合操作等。
643 2

推荐镜像

更多