MongoDB 数据库
非关系型数据库 数据库存储方式为 文档 数据为 键值对形式
mongodb文档类似于json对象 字段的值可以包含其他的文档,数组 以及数组文档
MongoDB 概念解析
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 表/集合 |
row | document | 行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表关联/MongoDB不支持 | |
primary key | primary key | 主键索引/mongodb自动将_id设置为主键索引 |
一 MongoDB的服务启动 创建数据库
(1) 服务开启
找到你的MongoDB的bin目录
C:\mongodb\bin
在终端输入
cd MongoDB的bin目录
mongod.exe –dbpath=你要选择创建数据库的路径
(2) 进入 MongoDB数据库
cd MongoDB的bin目录
mongo.exe
二 对于库的操作 database
(1) 创建库
use 库名
注意:
- 当我use一个不存在的库的时候 其实这个库已经创建出来了 但是里面没有数据 使用show dbs的时候 该库不会显示
- mongodb严格区分大小写
在MongoDB里 不管是什么操作 都是db.。。。
show dbs #获取所有的库
use 库名 #创建一个数据库
db.getName() # 获取当前的所在的库
db.createCollection('user') #在当前的库里面创建一个 user集合
show collections #查看所有的集合
db.集合名.drop() #删除集合
db.a.insert({name:"zhangsan",age:18,sex:"w", hobby:"papapa"}) #插入数据
db.a.find()
db.a.insert([{name:"wangwu"},{name:"zhaoliu"},{name:"Sam"}]) #插入多条数据
db.a.save({"_id" : ObjectId("5a1a5bf8598fb66ba2d114da"),name:"Sam",age:19}) #修改信息
db.a.insertOne({key:value}) #插入一条数据
db.a.insertMany({key:value},{key:value},{key:value}) #插入多条数据
db.a.remove({}) #移除所有数据
db.a.remove({key:value},1) #移除一条数据
db.a.remove({key:value}) #移除匹配到的所有数据
db.a.deleteOne({key:value}) #删除一条数据
db.a.deleteMany({key:value}) #删除多条数据
db.a.find() #查询所有
db.a.find({name:"Sam",age:54}) #查询满足条件的数据
db.a.find({key:value}).pretty #查询所有符合条件的数据
db.a.find({key:value},{_id:0,key1:1,key2:1}) #id键默认1查询符合条件的数据并显示key值,1为显示,0为隐藏
db.a.find().count() #统计所有数据条数
db.a.find({age:{$gt:30}}) #条件查询
(2) 删除数据库
- 删除数据库之前最好use一下 确定自己所在哪个库下
- db.dropDatabase()
(3) 查看所有的库
show dbs
三 对于集合的操作 collection
(1) 创建集合(也就是创建表)
db.createCollection(‘集合名称’)
如:
db.createCollection(‘user’) #在当前的库里面创建一个 user集合
(2) 删除集合
db.集合名.drop()
如:
db.user.drop() #删除user集合
(3) 显示所有集合
show collections
四 INSERT/SAVE 文档的插入
(1) insert的插入一条文档
db.集合名.insert(文档)
(2) insert 插入多条文档
db.集合名.insert([文档1[,文档2]])
注意:
如果没有中括号 那么只会将第一条数据 插入成功
(3) save (更多的来说是作为修改 但是可以作为文档的插入)
db.集合名.save(文档) 插入一条文档
db.集合名.save({“_id” : ObjectId(“5a152a67fa08a5e7ad2ad092”),zzz:’vvv’}) #将id为92的文档 进行覆盖
3.2版本以后 建议使用
db.collection.insertOne()
db.collection.insertMany()
五 REMOVE文档删除
(1) 只删除一条数据
db.collection.remove(条件,1)
db.user.remove({name:”张三”},1) #会删除第一个匹配到的文档
(2) 删除多条数据
db.collection.remove(条件)
db.user.remove({name:”张三”}) #删除多条文档
(3) 全部删除
db.collection.remove({}) #删除当前集合的全部文档
3.2版本以后 建议使用
db.collection.deleteOne() #删除一条文档
db.collection.deleteMany() #删除多条文档
六 FIND 查询
(1) 查询所有
db.collection.find() 查询所有
db.collection.find({条件},{key1,1[,key2,1]}) 按照条件来查询 设置某些键的显示
db.user.find({name:”王五”},{name:1}) #查询所有name为王五的文档 只显示name的值
db.collection.find({条件},{key1,0[,key2,0]}) 按照条件来查询 除了key1 key2以外的键值对 都显示
db.user.find({name:”王五”},{name:0}) #查询所有name为王五的文档 显示 name键值对以外的所有的值
db.user.find({},{key:1}) #条件是 查询所有 只显示某个键值对
注意:
错误的混搭写法:
db.user.find({name:"王五"},{age:1,name:0})
_id 键 默认返回 _id:0 隐藏
除了设置系统的_id 可以混搭外 其它都不可以
db.user.find({name:"王五"},{_id:0,name:1}) #id隐藏 只显示 name的键值对
(2) findOne 查询一条数据
db.collection.findOne({条件},{key1:1[key:1]})
(3) count 统计
db.collection.find().count() 统计所有文档的条数
db.user.find({name:”王五”}).count() 统计满足条件的文档的条数
(4) pretty 展开显示
db.collection.find().pretty()
注意:
只有当文档一行显示不下(比较长的时候) 会展开显示
(5) and 逻辑与查询
db.user.find({name:’赵六’,age:54}) 查询 name为赵六 并且 age为54的文档
db.user.find({name:”赵六”,age:{$gt:40}}) 查询name为赵六 并且年龄大于40
db.user.find({age:{$gte:18,$lte:40}},{_id:0,age:1}) 查询年龄在18-40之间
(6) or 逻辑或
$or
db.user.find({$or:[{name:”王五”},{age:40}]}) 查询name为王五 或者age为40的文档
db.user.find({$or:[{name:”王五”},{name:”赵六”}]}) 查询name为王五或者赵六的所有文档
(7) and 和 or 一起使用
db.collection.find( { 键:值[,键:值] , $or:[ {键值对1} , {键值对2}] })
db.user.find({name:”王五”,$or:[{age:30},{age:40}]}) 查询name为 王五 年龄为30或者40的所有文档
(8) limit 取值
db.collection.find().limit(num) #从0去 num条数据
db.user.find().limit(3) #取三条数据
(9) skip 跳过几条文档
db.collection.skip(num) #跳过num条文档
db.user.find().skip(9) #跳过9条数据
(10) skip 和 limit 配合使用
db.collection.find().skip(num).limit(num)
db.user.find().skip(8).limit(1) #跳过8条数据 取1条 limit m,n
(11) sort 排序
db.collection.find().sort(key:1/-1) #按照key的升序/降序
db.user.find().sort({age:-1}) 按照年龄 降序显示
db.user.find().sort({age:-1}).limit(1) #取出一条年龄最大的文档
七 条件操作符
操作符 | 说明 | 使用 |
---|---|---|
gt | 大于 | db.user.find({age:{gt:30}},{age:1})年龄>30 | ||
gte | 大于等于 | db.user.find({age:{gte:30}},{age:1})年龄>=30 | ||
lt | 小于 | db.user.find({age:{lt:30}},{age:1})年龄<30 | ||
lte | 小于等于 | db.user.find({age:{lte:30}},{age:1})年龄<=30 | ||
键:值 | 等于 | db.user.find({age:30}) |
_id:objectId() | id来查询 | db.user.find({“_id” : ObjectId(“5a162218fa08a5e7ad2ad09c”)}) |
/数据/ $regex | 模糊查询 | db.user.find({name:/李/}) |
/^数据/ | 以数据作为开头 | db.user.find({name:/^李/}) |
/数据/ | 以数据作为结尾 | db.user.find({name:/五/}) | ||
in | 在...范围之内 | db.user.find({age:{in:[23,30]}}) | ||
nin | 不在...范围之内 | db.user.find({name:{nin:[‘王五’,’赵六’]}}) | ||
ne | 不等于 | db.user.find({name:{ne:’王五’}}) |
八 update 修改
db.collection.update(条件,修改的操作,{upsert:bool,multi:bool})
upsert:bool: 默认FALSE 如果修改的数据不存在 TRUE为插入 FALSE为不插入**
multi:bool: 默认FALSE 只修改匹配到的第一条 TRUE为修改全部
$set 直接修改
$inc 累加修改
直接修改 修改一条
db.user.update({name:”潘金莲”},{$set:{age:20}}) #把name为潘金莲的文档的age直接改为20
累加修改 修改多条
db.user.update({name:”王五”},{$inc:{age:3}},{multi:true})
直接修改文档 文档不存在 则插入
db.user.update({name:”xxx”},{$set:{age:100}},{upsert:true})
3.2版本以后 建议
updateOne() 只更新一条
updateMany() 更新多条
九 数据库的备份
(1) 备份
在原来的服务里 新打开一个终端
cd ->mongodb->bin下
mongodump
此刻 你的bin目录下就会有一个dump的文件夹
(2) 恢复
新打开一个终端 开启mongodb服务
在新建一个终端
cd ->mongodb->bin下
mongorestore
这样数据就回来了
十 MySQL的备份
(1) 备份
>mysqldump -u用户名 -p 导出的数据库的名称>导出以后的库的名称.sql
>输入密码
(2) 数据的恢复
>mysql -u用户 -p 导入的库名<外部备份的SQL文件.sql
>输入密码
注意:
备份和恢复的命令不要再mysql里去执行 因为这个不是mysql的命令