MongoDB学习之路(五)
MongoDB $type 操作符
| 类型 | 数字 | 备注 |
|---|---|---|
| Double | 1 | |
| String | 2 | |
| Object | 3 | |
| Array | 4 | |
| Binary data | 5 | |
| Undefined | 6 | 已废弃 |
| Object id | 7 | |
| Boolean | 8 | |
| Date | 9 | |
| Null | 10 | |
| Regular Expression | 11 | |
| JavaScript | 13 | |
| Symbol | 14 | |
| JavaScript(with scope) | 15 | |
| 32-bit Integer | 16 | |
| Timestamp | 17 | |
| 64-bit Integer | 18 | |
| Min key | 255 | Query with -1 |
| Max key | 127 |
实例:
获取title为String的数据
>db.col.find({"title": {$type : 2)}});
MongoDB Limit与Skip方法
MongoDB Limit()方法
limit()方法接受一个数字参数,意为从数据记录中读取指定个数的记录条数。
语法
>db.col.find().limit(NUMBER);
MongoDB Skip()方法
skip()方法可以用来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
Tips:
db.col.find({}, {"title": 1, _id: 0}).limit(2)- 第一个{}放where条件,为空表示返回集合中所有文档。
- 第二个{}指定哪些列显示和不显示(0表示不显示1表示显示)
- 想要读取从10条记录后的100条记录,相当于sql中limit(10,100)
db.col.find().skip(10).limit(100)- skip和limit结合就能实现分页
- 当查询时同时使用sort,skip,limit, 无论位置先后,最先执行顺序为先sort再skip再limit。
MongoDB排序
MongoDB sort()方法
在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序字段,并使用1和-1来指定排序的方式,其中1为升序排列,而-1是用于降序排列。
语法:
>db.col.find().sort({KEY:1});
For Instance
>db.col.find({}, {"title":1, _id:0}.sort({"likes": -1});
上述是选取所有的记录,只显示title,并且按照likes的大小降序排列。
MongoDB 索引
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件,并且选取那些符合条件的记录。
索引是一种特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
ensureIndex()方法
MongoDB使用ensureIndex()方法来创建索引。
语法:
>db.col.ensureIndex({KEY:1});
上述语法中KEY值为你要创建的索引字段,1为指定按升序创建索引,-1为指定降序来创建索引。
For Instance
>db.col.ensureIndex({"title":1});
同时,ensureIndex()方法中你也可以设置使用多个字段创建索引。(关系型数据库中称为复合索引)
>db.col.ensureIndex({"title":1, "description": -1});
ensureIndex()接受可选参数,可选参数列表如下:
| 参数 | 类型 | 描述 |
|---|---|---|
| background | Boolean | 建索引过程会阻塞其他数据库操作,background可指定以后台方式创建索引,即增加"background"可选参数。"background"默认值为false |
| unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false |
| name | String | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排列顺序生成一个索引名称 |
| 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 |
For Instance
在后台创建索引:
>db.col.ensureIndex({ open: 1, close: 1}, {background: true});
MongoDB聚合
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。类似于sql语句中的count(*)。
aggregate()方法
MongoDB中聚合的方法使用aggreagte()。
语法:
>db.col.aggregate(AGGREGATE_OPERATION);
通过一个官方文档中的图片来讲解该函数

图片来自:https://docs.mongodb.com/manual/aggregation/
下表展示了一些聚合表达式
| 表达式 | 描述 |
|---|---|
| $sum | 计算总和 |
| $avg | 计算平均值 |
| $min | 获取集合中所有文档对应值的最小值 |
| $max | 获取集合中所有文档对应值的最大值 |
| $push | 在结果文档中插入值到一个数组中 |
| $addToSet | 在结果文档中插入值到一个数组中,但不能创建副本 |
| $first | 根据资源文档的排序获取第一个文档数据 |
| $last | 根据资源文档的排序获取最后一个文档数据 |
管道Pipeline
和Unix、Linux中类似,一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。并且管道的操作可以重复的。
几种常用的方法:
- $project:修改输入文档结构。可用重命名、删除或增加域。
- $match:用于过滤数据。上面图片中有具体实例
- $limit:用来限制返回的数量。
- $skip:跳过指定文档数量
- $group:将集合中的文档分组,可用于统计结果
- $sort:将输入文档排序后输出。
>db.article.aggregate(
{ $project: {
title: 1,
author : 1,
}
}
);
通过上述修改,结果中就只有_id,title和author三个字段了。默认情况下_id字段是被包含的。如果不包含可以使用下述代码
>db.article.aggregate(
{ $project : {
_id : 0,
title: 1,
author: 1
}
}
);
skip实例
>db.article.aggregate(
{ $skip: 5}
);
经过$skip管道操作符处理后,前五个文档会被"过滤"掉。
MongoDB学习之路(五)的更多相关文章
- MongoDB学习笔记(五)--复制集 && sharding分片
主从复制 主从节点开启 主节 ...
- mongodb学习之路1
第一节 MongoDB介绍及下载与安装 引言 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似 json的b ...
- MongoDB 学习笔记(五):固定集合、GridFS文件系统与服务器端脚本
一.count.distinct与group 1.count函数:查询文档数,如下图: 2.distinct:去重,用法:db.runCommand({distinct:"集合名" ...
- redis——学习之路五(简单的C#使用redis)
redis官方推荐使用的客户端程序 打星星表示推荐使用的客户端程序,一个笑脸表示最近6个月内有过正式活动的.http://redis.io/clients/#c 从这里我们可以判断官方推荐我们使用Se ...
- zigbee学习之路(五):定时器1(查询方式)
一.前言 今天,我们来学习几乎所有单片机都有的功能,定时器的使用,定时器对单片机来说是相当重要的,有了它,单片机就可以进行一些复杂的工作. 二.原理与分析 谈到定时器的控制,我们最先想到的是要给它赋初 ...
- MongoDB学习之路(四)
MongoDB插入文档 MongoDB使用insert()或save()方法向集合中插入文档. db.COLLECTION_NAME.insert(document); For instance &g ...
- MongoDB学习之路(三)
数据库 一个MongoDB可以建立多个数据库. MongoDB的默认数据库为"db",该数据库存储在data目录中. MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自 ...
- MongoDB学习之路(二)
MongDB特点 MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器的性能. MongoDB旨在为WEB应用提供可拓展的高 ...
- MongoDB学习之路(一)
NoSQL简介 NoSQL(Not Only SQL),意为"不仅仅是SQL" 关系型数据库遵循ACID规则 1. A(Atomicity)原子性 指的是事务里的所有操作要么全部做 ...
随机推荐
- python实战===实现读取txt每一行的操作,账号密码
最近搞到了一批163邮箱的账号和密码,但是里面有部分账号不能用,密码是错的. 以此为背景 人工手动挨个登录检查效率太低! 于是写了下面这个脚本: import linecache import smt ...
- 【NO.12-1】Jmeter - 在Linux执行性能测试的方法 [1]
前面讲过在Windows执行性能测试的方法,就是这篇了<jmeter - 一个完整的接口测试的脚本>, 在Windows执行性能测试之前,首先要有1个性能测试脚本嘛, 但是这个性能测试脚本 ...
- 怎样做才是最优雅方式切换 web 项目数据源 ?
随着业务变迁/需求变更,JavaEE 应用中会被迫连接多个数据源进行业务处理. 怎样在不影响原有项目结构的情况下,已最优雅/最简洁的方式动态切换数据源呢? 本文已一次添加数据源后动态切换实践为例,描述 ...
- Dinic算法详解及实现
预备知识: 残留网络:设有容量网络G(V,E)及其上的网络流f,G关于f的残留网络即为G(V',E'),其中G'的顶点集V'和G的顶点集V相同,即V'=V,对于G中任何一条弧<u,v>,如 ...
- JackSon将java对象转换为JSON字符串
JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的writeValueA ...
- Android上传图片到服务器,服务端利用.NET WCFRest服务读取文件的解决方案
在项目中遇到要将Android设备拍摄的照片上传的服务器,将文件保存在服务器本地的文件夹中,数据库中保存的是图片文件名.整个上传是将图片生成二进制流通过HTTP请求上传到服务端,服务端是基于.NET环 ...
- Mybatis分页插件PageHelper正确的使用方法(网上有2篇不够科学的文章)
今天下午在Mybatis项目中,实现分页.因为我是后加入项目中的,Leader用的是PageHelper这个组件,但是我在实际使用的过程中遇到了2个大问题. 1.http://www.oschina. ...
- [js高手之路]原型对象(prototype)与原型链相关属性与方法详解
一,instanceof: instanceof检测左侧的__proto__原型链上,是否存在右侧的prototype原型. 我在之前的两篇文章 [js高手之路]构造函数的基本特性与优缺点 [js高手 ...
- DataTableToList
很简单的转换功能,这是我在GitHub上复制的一段代码(懒得再去找原地址了),感觉功能还算可以,贴出来分享给大家 /// <summary> /// DataTable to List c ...
- sdram控制2
芯片手册要求sdram需要在64ms内刷新8K次,否则里面的数据会丢失,因此在64ms分成8192次,每次刷新充一次电,然后给两次自动刷新命令即可. /*----------------------- ...