1.安装
版本:windows-64bit-----mongodb-win32-x86_64-2012plus-4.2.1-signed
百度云网盘
链接:https://pan.baidu.com/s/1Cuqi94GAhXXdYyMmMXiCSA
提取码:502k
下载安装完成后 向系统环境变量path中添加
C:\Program Files\MongoDB\Server\4.2\bin
打开cmd------mongo指令查看是否安装完成
2.使用mongoDB
- 新建一个放数据库的文件夹(注意不能有中文和空格,也不要放在C盘中)
- 启动mongoDB服务
打开cmd(用管理员身份)
服务端:mongod --dbpath 新建数据库文件夹地址
打开cmd服务端不要关闭
再打开一个cmd 作为本地用户端
mongo连接服务端
连接完成后show dbs 查看文件
如果连接远程服务端使用指令
mongo ip:27017
3.基本指令及使用常识
- 基本操作
**每次使用某个数据库时都要用 use - 常用指令
show dbs 显示所有大集合
cls 清屏
4.新建数据库
指令:
show dbs 显示所有集合
use news 新建news集合 先用use 声明使用
db.class.insert("name":"张三","age":30) 向news数据库中添加class集合
并向其中插入1条数据
show collections 显示news 数据库中的集合
演示:
5.删除表,删除数据库
若数据库中没有表,则数据库就被删除了
news 数据库中 存在 news_game表
db.news_game.drop() 删除news_game表 此时news数据库中没有表 也被删除了
use news
db.dropDatabase() 删除当前所在数据库 也就是删除news数据库
6.查找数据
- 查找所有记录
db.student.find();
- 查询去掉后的当前聚集集合中的某列的重复数据
db.student.distinct("name"); 会过滤掉 name 中的相同数据
- 大于,小于 等
db.student.find({"age":20}) 查询年龄等于20的数据
db.student.find({"age":{$gt:20}}) 查询年龄大于20的数据
db.student.find({"age":{$gte:20}}) 查询年龄大于或等于20的数据
db.student.find({"age":{$lt:20}}) 查询年龄小于20的数据
db.student.find({"age":{$lte:20}}) 查询年龄小于或等于20的数据
db.student.find({"age":{$gt20,$lt26}) 查询年龄大于20小于26的数据
- 模糊查询
db.student.find({"name":/王/}) 查询名字中有“王”的数据
db.student.find({"name":/^王/}) 查询名字以“王”开头的数据
- 查询指定列的数据
db.student.find({},{"name":1,"age":1}) 查询的数据只显示 name age两列
db.student.find({"age":{$gt20}},{"name":1}) 查询年龄大于20的数据且只显示名字
- 升序降序
db.student.find({"age":{$gt20}}).sort({age:1}) 升序
db.student.find({"age":{$gt20}}).sort({age:-1}) 降序
- limit,skip
db.student.find().limit(5) 查询的数据只显示5条
db.student.find().skip(5) 跳过前5条数据显示
db.student.find().skip(5).limit(5) 查询第6-10条数据
- and ,or
db.student.find({"name":"张三","age":20}) 查询姓名为张三且年龄等于20的数据
db.student.find({$or:[{"age":20},{"age":30}]}) 查询年龄为20或者30的数据
- db.userInfo.findOne(); 查询第一条数据
- 查询数据数量
db.student.find({"age":{$gt:20}}).count() 查询年龄大于20的数据的数量
db.student.find().skip(10).limit(5).count(true);
如果要返回限制之后的记录数量,要使用 count(true)或者 count(非 0)
7.修改数据
- 完全修改
db.student.update({"name":"小明"},{"name":"大明","age":16});
将符合条件的数据完全改为新数据
- 不完全修改
db.student.update({"name":"小明"},{$set:{"age":16}});
将符合条件的数据中的某字段进行修改
8.删除数据
db.student.remove({"age":20}) 删除年龄为20的所有数据
db.restaurants.remove({"age":20}, {justOne: true}) 删除年龄为20的一条数据 应该为最老的一条
9.索引
索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快。
随着集合的增长,需要针对查询中大量的排序做索引。如果没有对索引的键调用 sort,MongoDB 需要将所有数据提取到内存并排序。因此在做无索引排序时,如果数据量过大以致无法在内存中进行排序,此时 MongoDB 将会报错。
- 普通索引
db.student.ensureIndex({"name":1}) 创建索引
db.student.getIndexes() 获取当前集合索引
db.student.dropIndex({"name":1}) 删除索引
- 符合索引
该索引被创建后,基于 name 和 age 的查询将会用到该索引,或者是基于 name的查询也会用到该索引,但是只是基于 age 的查询将不会用到该复合索引。因此可以说,如果想用到复合索引,必须在查询条件中包含复合索引中的前 N 个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB 可以智能的帮助我们调整该顺序,以便使复合索引可以为查询所用
数字 1 表示 username 键的索引按升序存储,-1 表示 age 键的索引按照降序方式存储。
db.student.ensureIndex({"name":1, "age":-1}) 创建复合索引
- 唯一索引
唯一索引可以保证集合中不会出现相同的数据
db.student.ensureIndex({"userid":1},{"unique":true}) 创建唯一索引
db.user.ensureIndex({"userid":1,"age":1},{"unique":true}) 创建复合唯一索引(要保证复合键值唯一)
- 使用 explain
explain 是非常有用的工具,会帮助你获得查询方面诸多有用的信息。只要对游标调用该方法,就可以得到查询细节。explain 会返回一个文档,而不是游标本身。
db.student.find().explain( "executionStats" ) 查看查询数据所用时长及是否触发索引
关注输出的如下数值:explain.executionStats.executionTimeMillis