在MongoDB中执行查询与创建索引
实验目的:
(1)掌握MongoDB中数据查询的方法;
(2)掌握MongoDB中索引及其创建;
实验内容:
一、 MongoDB中数据查询的方法;
(1)find函数的使用;
(2)条件操作符:
a
l
l
匹
配
所
有
、
all匹配所有、
all匹配所有、exists判断字段是否存在、null值处理、$mod取模运算、不等于、包含、不包含、数组元素个数、限制返回、排序、分页、随机显示。
(3)distinct找出给定键所有不同的值;
(4)group分组;
(5)游标;
(6)存储过程。
二、 MongoDB中索引及其创建;
(1)基础索引;
(2)文档索引;
(3)组合索引;
(4)唯一索引;
(5)强制使用索引;
(6)扩展索引;
(7)删除索引
(8)explain执行计划
一、MongoDB中数据查询的方法
(1). find函数的使用
db.student.find() 查询所有数据
(2). 条件操作符
$all匹配所有、
db.student.find({sex:{$all:['male']}})
查询男生的学生数据
$exists判断字段是否存在
> db.student.find({class: {$exists:true}})
查询所有拥有class字段的学生信息;如果exists:false
,表示不存在这个字段的信息。
null值处理
teacher集合中,_id=1的数据没有字段age,或者说age字段对应的值是null,所以可以进行null值处理,将他查出来。
db.teacher.find({age:null})
$mod取模运算
例如:找出teacher集合中年龄age对10取模等于1的人的数据。
db.teacher.find({age:{$mod:[10,1]}})
运算符:
- $gt 大于
- $gte 大于等于
- $lt 小于
- $lte 小于等于
- $ne 不等于
- $in 包含
- $nin 不包含
- $eq 等于
查询学生年龄大于22的数据
db.student.find({age:{$gt:22}})
查询学生年龄小于22的数据
db.student.find({age:{$lt:22}})
查询学生年龄等于22的数据
db.student.find({age:{$eq:22}})
数组元素个数
db.student.count()
#查出student集合中的记录数
db.student.find({sex:'male'}).count()
#查出student集合中sex=male的人数
限制返回
db.student.find({},{sname:1}) # 返回sname字段其余不返回(id也返回)
db.student.find({},{sname:0}) # 除sname字段不返回外,其余都返回。
排序
按照年龄从大到小的顺序给学生表排序
db.student.find().sort({age:-1})
从小到大的顺序排序
db.student.find().sort({age:1})
分页
例如取前两条数据做分页。(如果想从后往前取数据,那么数字前加负号 ’ - ’)
db.student.find().limit(2)
随机显示
db.student.aggregate([ { $sample: { size: N } } ] )
从学生表中随机取出N条数据。
(3)distinct找出给定键所有不同的值;
db.student.distinct(‘sname’) #找出不同的名字
(4)group分组
求出年龄总和
db.student.aggregate( [
{
$group: {
_id: null,
total: { $sum: "$age" }
}
}
] )
求学生的平均年龄
db.student.aggregate([
{
$group: {
_id: null,
total: { $avg: "$age" }
}
}
])
(5)游标;
定义游标
var mycursor = db.student.find()
打印结果
while(mycursor.hasNext()){
printjson(mycursor.next());
}
也可以使用游标的forEach(printjson); 迭代访问文档.
显示游标状态信息
> db.serverStatus().metrics.cursor
{
"timedOut" : NumberLong(0),
"open" : {
"noTimeout" : NumberLong(0),
"pinned" : NumberLong(0),
"total" : NumberLong(0)
}
}
- timedOut:自服务器器启动以来超时游标数;
- noTimeout:使用DBQuery.Option.noTimeout 选项防止超时打开的游标数;
- pinned :打开的游标数量;
- total:打开游标的总数量;
关闭不活跃的游标
如果一个游标还没有遍历完,但是不使用了,需要将该游标关闭。默认情况下,服务器会自动关闭超过10分钟活跃的游标和还未耗尽的游标。你也可以自己手动关闭。
手动关闭前:var mycursor = db.student.find().noCursorTimeout();
然后在 cursor.close()
(6)存储过程。
MongoDB 存储过程是存储在 db.system.js 表中的.
1、 添加存储过程
db.system.js.save
(
{
_id:"getStuCount",
value:function(){
return db.student.find().count();
},
description:"获取总数"
}
)
执行存储过程:var obj = db.eval(“getStuCount()”);
2、 查询存储过程
db.system.js.find();
3、 修改存储过程
先添加一个add的存储过程
db.system.js.save({_id:“add”,value:function(x,y){return x+y;}})
修改add存储过程:
db.system.js.update(
{_id:"add"},
{$set:{value:function(x,y,z){return x+y+z;}}}
);
db.loadServerScripts()
:重新加载存储过程
查看存储过程,并执行
4、 删除存储过程
db.system.js.remove({_id:‘getStuList’});
MongoDB中索引及其创建
先向orders文档中添加数据
db. orders.insert({
"onumber" : i,
"date" : "2020-06-09",
"cname" : "hht"+i,
"items" :[ {
"ino" : i,
"quantity" : i,
"price" : 4.0
},{
"ino" : i+1,
"quantity" : i+1,
"price" : 6.0
}
]
})
(1)基础索引;
默认索引:创建文档的时候,没有指定_id的值,MongoDB会自动创建一个ObjectId,并将一个索引创建在 _id 键上,默认索引的名称是“_id”,并且无法删除。
db.orders.getIndexes()
查看orders文档的索引信息
单键索引:对文档的某个字段创建单建索引
db.orders.createIndex({cname:1})
{
“createdCollectionAutomatically” : false,
“numIndexesBefore” : 1,
“numIndexesAfter” : 2,
“ok” : 1
}
索引名默认是cname_1
(2)文档索引;
单列内嵌文档索引。
db.orders.createIndex({“item.info”:1})
查看索引
(3)组合索引;
创建组合索引
db.orders.createIndex({cname:1,onumber:-1})
(4)唯一索引;
给orders文档中的onumber字段添加上唯一索引。
db.orders.createIndex({onumber:1},{unique:true})
查看索引信息
(5)强制使用索引;
在find()后加上 hint可以强制使用某个索引。
db.orders.find({“cname”:{$gt:“hht1000”},“onumber”:2000}).hint({onumber:1})
这里是强制使用 onumber字段上的索引。
对这个查询执行explain()
db.orders.find({"cname":{$gt:"hht1000"},"onumber":2000}).hint({onumber:1}).explain()
(6)扩展索引;
在建立复合索引的有关字段顺序的扩展
如果我们的查询语句需要对a进行排序,对b用于覆盖索引,那就建(a,b)索引;
如果我们的查询语句需要对b进行排序,对a用于覆盖索引,那就建(b,a)索引;
如果我们的查询语句需要对a和b进行排序,那a,b哪个在前都可以用上索引。
(7)删除索引
删除索引,按照指定索引名删除
> db.orders.dropIndex("cname_1")
{ "nIndexesWas" : 2, "ok" : 1 }
删除全部索引
db.orders.dropIndexes()
(8)explain执行计划
在MongoDB中执行查询与创建索引的更多相关文章
- 在MongoDB中执行查询、创建索引
1. MongoDB中数据查询的方法 (1)find函数的使用: (2)条件操作符: (3)distinct找出给定键所有不同的值: (4)group分组: (5)游标: (6)存储过程. 文档查找 ...
- MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划
这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...
- mongodb中的排序和索引快速学习
在mongodb中,排序和索引其实都是十分容易的,先来小结下排序: 1 先插入些数据 db.SortTest.insert( { name : "Denis", age : ...
- 18-SQLServer中给视图创建索引
一.注意点 1.索引视图所引用的基表必须在同一个数据库中,不是用union all引用多个数据库的表: 2.创建索引视图时要加上with schemabinding: 3.创建索引视图时要指定表所属的 ...
- Mongodb 笔记03 查询、索引
查询 1. MongoDB使用find来进行查询.find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件.空的查询会匹配集合的全部内容.要是不指定查询,默认是{}. 2. 可以 ...
- SQLServer 语句-创建索引
语法:CREATE [索引类型] INDEX 索引名称ON 表名(列名)WITH FILLFACTOR = 填充因子值0~100GO /*实例*/USE 库名GOIF EXISTS (SELECT * ...
- SQLServer 语句-创建索引【转】
语法:CREATE [索引类型] INDEX 索引名称ON 表名(列名)WITH FILLFACTOR = 填充因子值0~100GO /*实例*/USE 库名GOIF EXISTS (SELECT * ...
- Solr DIH以Mysql为数据源批量创建索引
演示使用solr管理后台,以mysql为数据源,批量建索引的方法 测试于:Solr 4.5.1, mmseg4j 1.9.1, Jdk 1.6.0_45, Tomcat 6.0.37 | CentOS ...
- Oracle性能分析7:创建索引
在创建索引时,我们往往希望可以预估索引大小,以评估对现有project环境的影响,我们也希望创建索引的过程可以最小化的影响我们正在执行的project环境,并能查看索引的状况. 预估索引大小 预估索引 ...
随机推荐
- mysql 基础入门 单表查询
单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...
- CentOS7 扩容磁盘非根分区
CentOS7扩展磁盘分区 因为业务所在分区空间不足,需要扩容.分配磁盘大小为1T但实际使用过程中发现仅使用了500G左右空间,本次计划在原有磁盘上扩容1T,加上之前500G空闲直接扩容1.5TB ...
- 在linux下使用Apache搭建文件服务器
目录 一.关于文件服务器 二.使用Apache搭建文件服务器 三.测试文件服务器是否可用 一.关于文件服务器 在一个项目中,如果想把公共软件或者资料共享给项目组成员,可以搭建一个简易的文件服务器来 ...
- css 13-CSS3属性:Flex布局图文详解
13-CSS3属性:Flex布局图文详解 #前言 CSS3中的 flex 属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强.其强大的伸缩性和自适应性,在网页 ...
- layui的登录页面设计
主要的结构 先导入layui的主要的js和css等 <html> <head> <meta charset="utf-8"> <title ...
- SpringBoot从入门到精通教程(七)
今天,我们继续讲SpringBoot整合Redis ,也就缓存,它将与我们的Springboot整合 Redis 简介 Redis 是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语 ...
- Python 带你高效创作短视频,视频创作秀到飞起!!!
近两年,抖音.快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节:在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr.FCPX.剪印.Vue 等. 视频剪辑过程中,Python 一 ...
- Windows系统提示:“windows找不到文件请确定文件名是否正确后
最近使用Win7/10系统的用户反应在系统中移动了桌面上的一些与系统无关的文档,在挪动了文件之后出现的问题,弹出了windows找不到文件请确定文件名是否正确后,再试一次, 的错误提示,该怎么办呢? ...
- 【electron+vue3+ts实战便笺exe】二、electron+vue3开发内容
不要让自己的上限成为你的底线 本来以为有万字的..没想到才堪堪近6000字.为了水文的嫌疑,只挑了重点的地方讲,比如component内的组件就挑了右键弹窗去说明,建议在看本文的时候边查看项目,有不懂 ...
- springboot项目中使用jsp
在pom文件中 1.方法一 <!-- 引入tomcate内嵌的jsp解析包--> <dependency> <groupId>org.apache.tomcat.e ...