一,MongoDB简介
MongoDB是一个开源,高性能,无模式的文档数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品的一种,也是最想关系型数据库的非关系型数据库
它支持的数据结构非常松散,是一种类似JSON的格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当灵活
MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档,普通数字和文档数组
MySQL术语 | MongoDB术语 | 解释 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接/MongoDB不支持 | |
嵌入文档 | MongoDB通过嵌入文档代替多表连接 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
特点:高性能,高可用性,高扩展性
二,配置
-
首先在官网下载MongoDB
-
配置bin的环境变量
-
管理员启动cmd
-
命令 解释 net start MongoDB 启动服务 net stop MongoDB 关闭服务
-
三,常用命令
3.1,数据库操作
命令 | 解释 |
---|---|
use 数据库名称 | 创建数据库 |
show dbs(databases) | 查看所有数据库 |
db | 查看当前使用的数据库 |
db.dropDatabase() | 删除当前使用的数据库 |
3.2,集合操作
命令 | 解释 |
---|---|
db.createCollection("集合") | 显示创建集合 |
db.集合.drop() | 删除集合 |
show collections | 查看所有集合 |
3.3,文档操作
3.3.1,文档插入
db.集合.insert({文档} )
db.集合.insertMany([{文档},{文档}] )
文档格式类似于json
命令 | 解释 |
---|---|
insert | 集合中插入单个文档 |
insertMany() | 集合中插入多个文档 |
3.3.2,文档查询
db.集合.find(query, projection)
-
query:用于查找文档的查询条件。默认为
{}
,即匹配所有文档。-
db.集合.find() db.集合.find({"条件":"条件",..},..)
-
-
projection(可选):指定返回结果中包含或排除的字段。
-
db.集合.find(query,{域:1,_id:0}) //:1表示显示 //:0表示不显示 //_id这个域不指定0默认就是显示的根据自己需求来定
-
命令 | 解释 |
---|---|
find | 默认为 {} ,即匹配所有文档。 |
findOne | 匹配第一条文档 |
3.3.3,文档更新
db.集合.update(query,update,options)
-
覆盖修改
-
db.comment.update({条件},{修改文档}) //指定条件的文档被覆盖成修改后的文档
-
-
局部修改
-
db.comment.update({条件},{$set:{修改文档}}) //指定条件的文档被局部修改
-
-
批量修改
-
db.comment.update({条件},{$set:{修改文档}},{multi:ture}) //指定条件的文档被局部修改 //multi为 true表示支持批量 false默认只修改第一条匹配的文档
-
-
列值增长的修改(依次递增或递减)
-
db.comment.update({条件},{$inc:{域:NumberInt(1)}}) //指定条件的文档的域依次递增 //NumberInt:转换int类型 1表示每次累加1
-
命令 | 解释 |
---|---|
update | 修改文档 |
3.3.4,文档删除
命令 | 解释 |
---|---|
db.集合.remove(条件) | 按条件删除 |
db.集合.remove({}) | 全部删除 |
db.集合.remove({_id:"1"}) | 删除_id为”1“ |
3.3.5,统计查询
db.集合.count(query,options)
参数 | 类型 | 解释 |
---|---|---|
query | document | 查询选择条件 |
options | document | 可选。用于修改计数的额外选项 |
3.3.6,分页查询
db.集合.find().limit(numb) //从第一条开始查询numb条数据
db.集合.find().limit(numb).skip(numbTwo) //跳过numbTow条数据查询numb
命令 | 解释 |
---|---|
limit | 查询numb条数据 |
skip | 跳过numbTwo条数据 |
3.3.7,排序查询
db.集合.find().sort(排序方式) //升序 域:1 ,降序 域:-1 //排序方式支持多条件
3.3.8,正则的复杂条件查
db.集合.find({域:/表达式/}) //查询域中包含表示式的文档
3.3.9,比较查询
db.集合.find({域:{$符号:NumberInt(值)}})
符号 | 解释 |
---|---|
$gt | 大于 |
$lt | 小于 |
$gte | 大于等于 |
$lte | 小于等于 |
$ne | 不等于 |
3.3.10,包含查询
db.集合.find({域:{$in:["数据1","数据2"]}}) //域中满足数据1或数据2的文档
符号 | 解释 |
---|---|
$in | 包含 |
$nin | 不包含 |
3.3.11,条件连接查询
db.comment.find({$and:[{条件1},{条件2},{条件3},...]}) //查询满足所有条件的文档,$or满足其中一个条件即可 //条件可以是指定条件也可以是比较条件...
符号 | 解释 |
---|---|
$and | 与 |
$or | 或 |
3.4,索引
3.4.1,概述
索引支持在MongoDB中高效查询,和Mysql一样没有索引的化必须执行全表(集合)扫描,一般MongoDB就是用来处理大数量数据的,而在处理大量的数据时索引的作用就会体现出来。
3.4.2,类型
-
单字段索引
-
MongoDB支持在文档的单个字段上创建用户定义的升降/降序索引,称为单字段索引(Single Field Index)
-
对于单个字段索引和排序操作,索引键的排序顺序(升序降序)并不重要,因为MongoDB可以在任何方向上遍历索引
-
-
复合索引
-
MongoDB还支持多个字段的用户定义索引,即复合查询(COmpound Index)
-
复合索引中列出的字段顺序具有重要意义。顺序如{域1:1,域2:-1}组成,则索引首先按域1的正序排序,然后在每个有域1的文档,再按域2倒序排序
-
3.4.3,索引的查看
db.集合.getIndexes()
3.4.4,索引的创建
db.集合.createIndex(keys,optios)
参数 | 解释 |
---|---|
keys | 包含域的文档,{域:1或-1},1表示升序,-1表示降序 |
optios | 可选,包含一组控制索引创建的选项的文档。有关详细信息可参考官方文档 |
3.4.4,索引的移除
db.集合.dropIndex(index)/根据索引的name来移除索引
db.集合.dropIndex({域:1})//根据创建索引的指定规则来移除索引
db.集合.dropIndexes()//移除所有的索引
3.4.5,执行计划
-
查看索引的情况
-
查看索引的耗时
-
查看是否基于索引查询
db.集合.find({}).explain()//根据查询条件来展示是否用到索引