数据库的概念
官网宣传描述:
MongoDB是一个通用的、基于文档的分布式数据库,它是为现代应用程序开发人员和云时代而构建的。没有数据库能让你更有效率。
1.数据库与文件的差异
数据库有表,行,列,更加方便操作数据
数据库提供了接口,方便nodejs php java .net使用 增删查改 功能
2.传统数据库与非关系型数据库
NoSQL - not only sql 20世纪80年代出现,现在大数据时代又被重视
3.使用场景
数据库高并发与高读写的情况下
改良数据高存储与访问的需求
数据高可扩展性时候
4.数据库格式差异
Nosql是一个key value形式
5.Nosql存储数据库类型
key-value形式
6.为什么选择mongoDB
介于关系型数据库与非关系型数据库之间的产品
是非关系型数据库中功能最丰富,最像关系型数据库的
几乎可以实现类似关系型数据库单表查询的绝大部分功能
还支持对数据建立索引
特点:高性能,易部署,存储数据非常方便
安装与配置
官网下载
1.安装
根据操作系统、安装包类型、版本 下载包
2.安装完毕后,配置环境变量
找到mongoDB安装的bin目录,将其路径贴到 我的电脑 高级 环境变量 path中 添加在后面
3.检测全局环境配置完毕与否
win+r cmd进入命令行,输入 mongo 回车
启动与访问
自定义一个文件夹,用来存储mongoDB数据, 放置在非操作系统盘符,防止重装系统,删除数据库
如:
D:\mysoft\myMongoLib
- 启动数据库服务器
(不能关闭这个命令行窗口,否则这个数据库会被关闭;不能圈选其中的代码段,否则会挂起)
mongod --dbpath 存储mongoDB数据文件路径
- 自定义端口号 (尽量使用4位以上的)
mongod --dbpath 存储mongoDB数据文件路径 --port xxxx
- 启动数据库客户端 (重新打开新的命令行窗口输入)
mongo
会显示连接的URL地址信息: 如 mongodb://127.0.0.1:27017/ 后面可以加上库名称
- 连接远程数据库
mongo IP地址:27017
开机启动
mongoDB 4.0+ 会自动在 任务管理器 - 服务 中开启,无需开机手动启动数据库客户端
常用操作指令 / sql常用指令
【增】
先切换库,再增加表下对应数据 (有了数据,自然表也有了,库如果之前没有,也有了;前提要先use下)
use 库名
db.表名.insert({ 'name':'zhangsan' })
【查】
show dbs
或 show databases
--- 显示所有的库
db
--- 显示当前所在数据库
use 库名
--- 切换库
show collections
--- 显示当前库下所有的表
db.表名.find()
--- 显示某一张表所有的数据
db.表名.find().count()
--- 显示当前所有数据的条数
- 精确搜索
db.表名.find({'name':'zhangsan'})
--- 查找name为zhangsan的数据 - 范围搜索
db.表名.find({'age':{$gt:18}})
--- 显示age大于18的数据
db.表名.find({'age':{$gte:18}})
--- 显示age大于等于18的数据
db.表名.find({'age':{$lt:20}})
--- 显示age小于20的数据
db.表名.find({'age':{$lte:20}})
--- 显示age小于等于20的数据
db.表名.find({'age':{$gt:10,$lt:20}})
--- 显示age大于10且小于20的数据 - 或查找
db.表名.find({$or:[{'age':18},{'age':20}]})
--- 显示age等于18 或者 等于20的数据 - 模糊搜索
db.表名.find({'name':/^z/})
--- 显示name以z开头的数据
【查询后修饰结果】
- 返回结果升降序显示
db.表名.find().sort({'age':1})
--- 显示所有数据,且按照年龄升序排列
db.表名.find().sort({'age':-1})
--- 显示所有数据,且按照年龄降序排列 - 显示规定条数结果
db.表名.find().limit(2)
--- 显示前2条
db.表名.find().skip(2).limit(2)
--- 显示第3、第4条 - 只显示结果中的某一个字段
db.表名.find({},{'name':1})
--- 显示所有数据,且只显示name字段信息
【改】
对张三增加一个年龄
db.表名.update({ 'name':'zhangsan' },{$set:{'age':11}})
修改张三的名字
db.表名.update({'name':'zhangsan'},{$set:{'name':'lisi'}})
【删】
-
删除数据的某一个字段
db.表名.update({'name':'news'},{$unset:{'__v':''}})
--- 删除name为news数据的'__v'的字段 -
批量 删除数据的某一个字段
db.表名.update({'name':'news'},{$unset:{'__v':''}},{multi:true})
--- 批量删除上述操作 -
删除数据
db.表名.remove()
--- 删除当前表所有的数据(意味着这个表也就消失了)
db.表名.remove({'age':20})
--- 删除当前表age为20的数据
db.表名.remove({'age':20},{justOne:true})
--- 删除表内age为20的数据,且只删除第一个被找到的 -
删除表
db.表名.drop()
--- 删除指定的表 -
删除库
db.dropDatabase()
--- 删除当前所在的库
索引操作与查询时间
大批量数据查询,需要消耗时间,如果查询的属性,正好有被用于索引,则查询速度会更加迅速
【获取索引】
db.表名.getIndexes()
--- 获取表内的所有索引
【添加索引】
db.表名.ensureIndex({'name':1})
--- 为当前表的name字段,增加索引
db.表名.ensureIndex({"userId":1},{"unique":true});
--- 为当前表的userId字段,增加索引(且是唯一的)
【删除索引】
db.表名.dropIndex({'name':1})
--- 删除当前表的name字段索引
【查询时间】
db.表名.find({"name":"zhangsan"}).explain("executionStats")
--- 查询name为zhangsan的数据 所消耗的时间
通过executionTimeMillis看反应时间(单位毫秒)
网友评论