第一章 MongoDB

简介: MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可拓展的高性能数据存储解决方案。

  1. 介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库,支持的数据结构非常松散,是类似json的bson格式,可以存储比较复杂的数据类型
  2. 支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库表单查询的绝大部分功能,而且还支持对数据建立索引
    官网:https://www.mongodb.com

Docker安装MongoDB
镜像地址:https://hub.docker.com/_/mongo?tab=tags

拉取镜像

docker pull mongo:latest

#创建容器
docker run --name=mongodb -p 27017:27017 -v /usr/local/mymongo:/data/db(主机文件目录:容器文件目录) mongo:latest(镜像)

use
docker run --name=mongodb -p 27017:27017 -v /usr/local/mymongo:/data/db mongo:latest
#启动容器
docker start mongodb

#进入容器
docker exec -it mongodb /bin/bash

#使用mongoDB 客户端进行操作
mongo

show dbs # 查询所有数据库

MongoDB 基本操作
SQL术语/概念 mongoDB术语/概念 解释/说明
database database 数据库
table collection(table) 数据库表/集合
row document 数据记录/文档
column field 数据字段/域
index index 索引
table joins 表连接,mongodb不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

  1. 数据库以及表的操作

查看所有的数据库

show dbs # 查询所有数据库

#通过use关键字切换数据库

use admin

#创建数据库

说明: 在 mongodb中,数据库是自动创建的,通过use切换到新数据库中,进行插入数据库即可自动创建数据库

use testdb #切换数据库
db.user.insert({id:1,name:‘test’}) #插入数据
show dbs #可以看到testdb 数据库

#查看表

show tables

#删除集合(表)

db.user.drop()

#删除数据库

db.dropDatabase()

  1. 数据操作
    #新增数据

db.user.save({id:1,name:‘list’,age:20})

#更新数据
db.collection.update(

,
[
upsert:,
multi: ,
writeConcern:
]
)
参数说明:
query: update的查询条件,类似sql update的where后面的语句
update: update的对象和一些更新的操作符(如,inc…)等,也可以理解为sql update的set后面语句
upsert:可选,这个参数的意思是,如果不存在update的记录,是否插入objNew , true为插入,默 认是false,不插入
multi:可选,mongodb默认是false, 只要找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
writeConcern:可选,抛出异常的级别

db.user.update({id:1},{ KaTeX parse error: Expected 'EOF', got '}' at position 16: set:{name:'张三'}}̲) 只修改name db.u…set:{age:5}}) 更新不存在字段会新增该字段
db.user.update({id:1},{ KaTeX parse error: Expected 'EOF', got '}' at position 12: set:{age:1}}̲,true) 第三个参数为tr…set:{age:2}},false,true) 第四个参数为true,全部更新

#删除数据
通过 remove() 删除数据
db.clloction.remove(

{
justOne:,
writeConcern:
}
)
参数说明:
query:(可选) 删除的文档的条件
justOne:(可选) 如果设为true 或1 ,则只删除一个文档,如果不设置该参数,或默认使用false,则删除所有匹配文件的文档
writeConcern:(可选)抛出异常的级别

db.user.remove({id:1}) #删除id=1的数据
db.user.remove({id:1},true) #删除id=1的一条数据

为了简化操作,官方推荐使用deleteOne()与deleteMany()进行删除数据操作
db.user.deleteOne({id:1})
db.user.deleteMany({}) #删除所有数据

#查询数据
MongoDB 查询数据的语法格式如下:
db.user.find([query]+[fields])
query: 可选,使用查询操作符
fields: 可选,使用投影操作符指定返回的键,查询时返回文档中所有键值,只需要省略该参数即可(默认省略)
如果你需要易读的方式l爱读取数据,可以使用pretty()方法,语法格式如下:
db.col.find().pretty()
第一章 MongoDB_第1张图片

db.user.find({},{id:1,name:1}) #查询id,name, id:1=id:true
db.user.find({},{id:1,name:1}).cout() #获取数量
db.user.find({id:1}) #查询id=1的数据
db.user.find({id:1}).pretty() #美化输出

db.user.find({id:{ KaTeX parse error: Expected 'EOF', got '}' at position 6: lte:2}̲}) #查询小于等于2的数据…lte:15},id:{ KaTeX parse error: Expected 'EOF', got '}' at position 6: gte:2}̲}) #and查询,age小于…or:[{id:1},{id:2}]}) #查询id=1 or id=2

#分页查询:skip() 跳过几页, limit() 查询条数
db.user.find().limit(2).skip(1) #跳过1条数据,查询2条数据
db.user.find().sort({id:-1}) #按照id倒序排序,-1为倒序,1为正序

   #索引

#获取索引
db.user.getIndexes()
[
{
“v” : 2, #版本
“key” : {
“_id”(索引字段名) : 1(正序)
},
“name” : “id”,(索引名字)
“ns” : “testdb.user”(命名空间)
}
]

#创建索引

db.user.createIndex({age:1})

#删除索引

db.user.dropIndexes(‘age_1’)

#创建联合索引

db.user.createIndex({age:1,id:-1})

    #查看索引大小,单位:字节
  > db.user.totalIndexSize()

#执行计划 

插入一千条语句 mongodb使用的是javascript的引擎

for(var i=1;i<1000;i++) db.user.insert({id:100+i,username:‘name_’+i,age:10+i})
db.user.find().explain()
{
“queryPlanner” : {
“plannerVersion” : 1,
“namespace” : “testdb.user”,
“indexFilterSet” : false,
“parsedQuery” : {

	},
	"queryHash" : "8B3D4AB8",
	"planCacheKey" : "8B3D4AB8",
	"winningPlan" : {# 最佳执行方案
                   #查询方式: 'COLLSCAN'/全表扫描(最慢),'IXSCAN'/索引扫描
                   # FETCH/根据索引去检索文档  SHARD_MERGE/合并分片结果
                   #IDHACK/针对_id进行查询
		"stage" : "COLLSCAN",
		"direction" : "forward"
	},
	"rejectedPlans" : [ ]
},
"serverInfo" : {
	"host" : "c15834ba9dd2",
	"port" : 27017,
	"version" : "4.2.6",
	"gitVersion" : "20364840b8f1af16917e4c23c1b5f5efd8b352f8"
},
"ok" : 1

}

db.user.find({age:{ KaTeX parse error: Expected 'EOF', got '}' at position 8: gt:1000}̲,id:{ lt:20}}).explain()
db.user.find({_id:“5ec93673718c74ceeb87fcc5”}).explain() #最快,使用IDHACK

UI客户端工具
因为我用的是最新版的mongodb,索引使用客户端工具为 Robo 3T 1.3.1
$mongod --auth 开启验证

use admin
db.createUser({user:“admin”,pwd:“123456”,roles:[“dbAdminAnyDatabase”]}) #添加用户
monod --port 27018 #更换端口

你可能感兴趣的:(SQL,#,MongoDB,mongodb)