MongoDB学习(九)之排序、索引、聚合

本文详细介绍MongoDB中的排序、索引创建及聚合操作方法。包括sort()方法实现文档排序,createIndex()方法创建索引以提高查询效率,以及aggregate()方法进行数据聚合分析等核心功能。

一、排序

 1、sort()方法

  1)语法

   db.COLLECTION_NAME.find().sort({KEY:1})

    参数说明:

            ①KEY:指定排序的字段。

            ②1:升序方式。(默认按照)

               -1:降序方式。

  2)示例

      1、根据年龄(year)进行升序排序,结果中只显示name、year两个字段

      

注意:

           ①第一个{}:存放where条件,为空表示返回集合中所有文档。

           ②第二个{}:要查询的字段有哪些,1表示显示,0表示不显示。

           ③默认情况下,"_id"字段为1,其它字段中只要有一个字段为1,则另一些字段就为0。

 

二、索引

1、索引:提高查询速度,有索引之后,仅需扫描索引列即可(不需扫描全部内容),

2、createIndex()方法(创建索引3.0.0版本后)

   1)语法

     db.COLLECTION_NAME.createIndex({<key>:<n>})

     参数说明:

             ①key:要创建的索引字段(键)名。

             ②n

                     1:按升序创建索引,

                     0:按降序创建索引。

    

   2)  createIndex()可以接受的参数(可选参数)

参数

类型

描述

background

Boolean

true:指定以后台方式创建索引

false:默认情况

unique

Boolean

建立的索引是否唯一

true:创建唯一索引

false:默认情况

name

string

索引名称。

 未指定,通过连接索引的字段名和排序顺序生成一个索引名称。

dropDups

Boolean

建立唯一索引时是否删除重复记录

true:创建唯一索引

false:默认情况

sparse

Boolean

文档中不存在的字段数据不启用索引

true:索引字段中不会查询出不包含对应字段的文档。

false:默认情况

expireAfterSeconds

integer

指定一个以秒为单位的数值,完成TTL设定,设定集合的生存时间

v

index version

索引的版本号。

mongod创建索引时运行的版本(默认情况下)

weights

document

索引权重值(1-99999之间)。

该索引相对于其它索引字段的比重值

default_language

string

对于文本索引,停用词及词干和词器的规则列表(默认英语)

language_override

string

对于文本索引,指定包含在文档中的字段名,语言覆盖默认的language(默认值为language)

     3)示例

       1、在后台使用name字段(按升序)创建索引(增加background:true选项)

    

   3、使用"name"、"year"字段创建索引

     db.col.createIndex({"name":1,"year":1})

 4)索引的其它方法

     ①db.COLLECTION_NAME.dropIndex(index)       移除集合指定的索引功能(index为需要删除的集合索引名)

     ②db.COLLECTION_NAME.getIndexes()              返回一个集合中的现有索引描述信息的文档数组

     ③db.COLLECTION_NAME.dropIndexes()            移除集合的索引功能

     ④db.COLLECTION_NAME.reIndex()                    删除指定集合上所有索引,重新构建所有现有索引(该命令在大数据情况下特别影响性能)

     ⑤db.COLLECTION_NAME.totalIndexSize()         提供指定集合索引大小的报告信息

 

三、聚合

1、概念:

       ①聚合为集合文档数据提供各种处理数据方法,并返回计算结果。

       ②三种方式执行聚合命令:聚合管道方法、map-reduce方法(没第一种好,不用)、单一目标聚合方法

2、aggregate()方法(聚合管道方法)

   1)概念

       ①聚合管道方法(合计流水线法),就是把集合里若干含数值型的文档及,其键对应的值进行各种分类统计。

       ②该方法支持分片集合操作。

   2)语法

   db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

   3)示例   

      对"col"集合根据"year"字段进行分组,并将字段值存到_id上,统计结果存到"num"字段

  

     类似于:select year,count(*) from col  group by year

  

   4)一些聚合表达式

表达式

描述

示例

$sum

计算总和

db.col.aggregate([{$group:{_id:”$year”,sum:{$sum:1}}}])

$avg

计算平均值

db.col.aggregate([{$group:{_id:”$year”,avg_year:{$avg:”$year”}}}])

$min

获取集合中所有文档对应值的最小值

db.col.aggregate([{$group:{_id:”$year”,min_year:{$min:”$year”}}}])

$max

获取集合中所有文档对应值的最大值

db.col.aggregate([{$group:{_id:”$year”,max_year:{$max:”$year”}}}])

$push

在结果文档中插入值到一个数组中

db.col.aggregate([{$group:{_id:”$year”,result:{$push:”year”}}}])

$addToSet

在结果文档中插入值到一个数组中,但不创建副本。

db.col.aggregate([{$group:{_id:”$year”,result:{$addToSet:”$name”}}}])

$first

根据资源文档的排序获取第一个文档数据

db.col.aggregate([{$group:{_id:”$year”,first_name:{$first:”$name”}}}])

$last

根据资源文档的排序获取最后一个文档数据

db.col.aggregate([{$group:{_id:”$year”,last_name:{$last:”$name”}}}])

   5)管道(MongoDB的聚合管道)-----------------处理文档的

      (1)定义:一个管道处理完毕后将结果传递给下一个管道处理,管道操作可重复。

      (2)表达式:处理输入文档并输出。

      (3)常用的操作符:

操作符

说明

$project

修改输入文档的结果。(可重命名、增加或删除域、创建计算结果和嵌套文档)。

$match

用于过滤数据,只输出符合条件的文档,该操作为标准查询操作。

$limit

限制MongoDB聚合管道返回的文档数。

$skip

在聚合管道中,跳过指定数量的文档,并返回余下的文档。

$unwind

将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

$group

将集合中的文档分组,可用于统计结果。

$sort

将输入文档排序后输出

$geoNear

输出接近某一地理位置的有序文档

        (4)示例

              ①使用$project,只显示name和year字段。

                

              ②使用$match,用于获取year大于17小于或小于等于18记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理

                 

              ③使用$skip,跳过前一个文档。

               

3、单一目标聚合方法

 1) db.COLLECTION_NAME.count()

   (1)语法

     db.COLLECTION_NAME.count(query,options)

  (2)命令说明

             1、功能:统计集合里符合查询条件的文档数量。

             2、参数说明:

                           ①query:查询条件。

                           ②options:选项。

              option参数列表

名称

类型

说明

limit

Integer

限制要计数的文档的最大数量

Skip

Integer

计数前要跳过的文档数

Hint

String或document

对需要查询的索引进行提示或详细说明

maxTimeMS

Integer

设置允许查询运行的最长时间

ReadConcern

String

指定读取关注(默认local)

指定majority级别时,必须要满足以下三个天剑

  1. 必须先启动Mongod实例。
  2. 多用与副本集数据库的读关注。
  3. 使用该级别时,必须指定非空的查询条件。

  (2)示例

         1、统计符合条件的记录数(年龄大于15的人数)

          

2)db.COLLECTION_NAME.distinct()

    (1)语法

         db.COLLECTION_NAME.distinct(<key>,query,option)

    (2)命令说明

          1、功能:统计集合里指定键的不同值,并返回结果。

           2、参数说明:

                         ①<key>:一个键名。

                         ②query:集合查询条件。

                         ③option:collations选项。

       (3)示例

         1、统计集合中_id的的不同值,并且返回。

       

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值