目录
1.简介
2. 特点:
3.官网下载
4.启动
4.1命令参数方式启动服务
4.2配置文件方式启动服务
5.shell命令连接
6.Linux命令安装
7.Docker安装
8.命令的基本使用
8.1数据库的操作
8.2数据库的删除
8.3集合操作
9.文档的插入和查询
10.文档更新
11.文档删除
12.文档分页查询
13.更复杂的查询
14.常用命令总结
15.索引Index
16.索引的操作
16.索引的使用
是一个开源、高性能、无模式的文档形数据库,mysql是关系型数据库。是那种最像关系型数据库的非关系型数据库。
数据格式非常松散,类似于JSON的格式BSON,他既可以存储比较复杂的数据类型,又比较灵活。
MonggoDB的记录十一文档,它是由一个字段值对(field:value)组成数据结构,类似于json队形
高性能:支持持久性,索引支持更快长训
高可用:MongoDB的到工具被称为副本集,它可提供自动故障转移和数据冗余
高扩展:分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展)
丰富的查询支持:B支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等。
MongoDB Community Download | MongoDB 官网下载
https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-5.0.9.zip 下载连接
命名规范:X.Y.Z的格式
y为奇数时表示当前版本为开发版,如:1.5.2、4.1.13;
默认端口27017
创建一个存放数据库的文件夹文件夹,在根目录创建了data>db文件夹
在bin目录下 启动命令:
启动命令:ps这个--dbpath=后面的是你数据库要存的文件的地址
ps:后面不能有空格
mongod --dbpath=..\data\db
先写一个配置类
在bin目录下写一个conf,在里面写一个个mongod.conf
storage:
#The directory where the mongod instance stores its data.Default Value is "\data\db" on Windows.
dbPath: E:\baidu\MongoDB\mongodb-windows-x86_64-4.4.15\mongodb-win32-x86_64-windows-4.4.15\data\db
ps:dbPath前面空4个空格,点tab会报错
启动命令
在bin目录下
mongod -f ../config/mongod.conf
或
mongod --config ../conf/mongod.conf
方案1:配置环境变量,就在path里面配置mongodb的bin目录
然后在命令行输入:mongo启动
方案2:在bin目录下启动 输入mongo
首先下载安装包,并导入linux里面
解压:
tar -xvf mongodb-linux-x86_64-4.0.10.tgz
移动到自己的文件夹下
mv mongodb-linux-x86_64-4.0.10 /opt/module/
此时就相当于windows里面默认配置
再按照windows一样方法进行启动 创建data,log,config文件
修改配置文件
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
# #The path of the log file to which mongod or mongos should send all diagnostic logging information
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/single/log/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
##The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: "/mongodb/single/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
net:
#服务实例绑定的IP,默认是localhost,115.60.97.40服务器内网地址
bindIp: localhost,115.60.97.40
#bindIp
#绑定的端口,默认是27017
port: 27017
docker pull mongo:latest
docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo
docker exec -it mymongo /bin/bash
#启动
mongo
前置:mongodb的存储结构
use 数据库名称 选择和创建数据与库,如果数据库不存在会直接创建,先创建是再内存中
show dbs 查看有权限查看的数据库内容
show databases 和show dbs一样
ps:
1.再MongosDB中,集合只有再内容插入之后才会创建!,创建集合(数据表后要插入一个文档记录),集合才会出现
2.数据库创建满足一下条件:
1)不能是空字符串 2)不能含有空格,点,$,/,\,和(空字符)3)应该全部小写4)最多64个字节
db 查看当前正在使用的数据库命令,如果没有选择数据库集合默认存放再test数据库中
可以查看use的数据库
保留数据库:
db.dropDatabase() 用来删除已经持久化的数据库
显示创建
db.createCollection("集合名字") 创建集合
show collections 查看创建的集合
db.集合.drop() 删除集合
隐示创建
具体在9,通俗说文档没有就直接创建
插入
单插入
db.集合名称.insert(换成save也可以)(
{json数据}
) 单个文档插入
多插入
db.集合名称.insertMany([
{json数据},
{json数据},
{json数据}
]) 多个文档插入
举例:
db.comment.insertMany([
{"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我 他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date(),"likenum":NumberInt(1000),"state":"1"},
{"_id":"2","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"1005","nickname":"伊人憔 悴","createdatetime":new Date(),"likenum":NumberInt(888),"state":"1"},
{"_id":"3","articleid":"100001","content":"我一直喝凉开水,冬天夏天都喝。","userid":"1004","nickname":"杰克船 长","createdatetime":new Date(),"likenum":NumberInt(666),"state":"1"},
{"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭,影响健康。","userid":"1003","nickname":"凯 撒","createdatetime":new Date(),"likenum":NumberInt(2000),"state":"1"},
{"_id":"5","articleid":"100001","content":"研究表明,刚烧开的水千万不能喝,因为烫 嘴。","userid":"1003","nickname":"凯撒","createdatetime":new Date(),"likenum":NumberInt(3000),"state":"1"}
]);
查询
db.集合名字.find() db.集合名字.find({}) 文档查询
db.comment.find({"列":"值"}) 查询对应属性
举例:
db.comment.find({"articleid":"100001"})
条件查询
db.comment.find( {"列":"值"} ,{_id:1,articleid:0} ) 第一列标识查的符合条件行,第二行表示查询的列,0表示不显示,1表示显示 举例
db.comment.find({"articleid":"100001"},{_id:1,articleid:0})
删除
db.表.drop() 删除集合
举例
db.comment.drop()
事务
MongoDB不支持事务,但是它可以使用json语法使用try--catch(){print(e)}在提示插入失败
举例:
try{
db.comment.insertMany([
{"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我 他。","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date(),"likenum":NumberInt(1000),"state":"1"},
{"_id":"1","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"1005","nickname":"伊人憔 悴","createdatetime":new Date(),"likenum":NumberInt(888),"state":"1"},
{"_id":"3","articleid":"100001","content":"我一直喝凉开水,冬天夏天都喝。","userid":"1004","nickname":"杰克船 长","createdatetime":new Date(),"likenum":NumberInt(666),"state":"1"},
{"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭,影响健康。","userid":"1003","nickname":"凯 撒","createdatetime":new Date(),"likenum":NumberInt(2000),"state":"1"},
{"_id":"5","articleid":"100001","content":"研究表明,刚烧开的水千万不能喝,因为烫 嘴。","userid":"1003","nickname":"凯撒","createdatetime":new Date(),"likenum":NumberInt(3000),"state":"1"}
]);
} catch (e) {
print (e);
}
db.集合.update(query,update,options) 以query条件查询,并修改成update里面的内容,options为可选的参数
覆盖修改
db.comment.update({_id:"6"},{content:NumberInt("10002")}) 把query一列全部修改成替换的
局部修改
db.comment.updateOne({_id:"1"},{$set:{articleid:"102"}}) 只修改某一列
批量修改
db.comment.update({userid:"1003"},{$set:{nickname:"凯撒大帝"}},{multi:true})
对multi设置未true
列值增长修改
db.comment.update({_id:"3"},{$inc:{likenum:NumberInt(1)}}) $inc表示自增一
db.集合.count(query, options) query表示查询条件,options用于修改技术的额外选项
db.comment.count() 查询多少条数据
db.comment.count({articleid:"100001"}) 条件查询多少条数据
db.comment.find().limit(2) 显示前2条数据
db.comment.find().limit(2) .skip(2) 显示两条数据并跳过前两条数据
db.comment.find().sort() 默认以_id为升序
db.comment.find().sort({userid:1}) 以userid为升序 1表示升序 -1表示降序
模糊查询
db.collection.find({field:/正则表达式/})
比较查询
db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value
db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value
db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value
举例:查询评论点赞数量大于700的记录
db.comment.find({likenum:{$gt:NumberInt(700)}})
包含查询
db.comment.find({userid:{$in:["1003","1004"]}}) $in表示包含在1003和1004
条件连接
交集$and:[ { },{ },{ } ] 查看likenum字段大于等于700,小于2000
db.comment.find({$and:[{likenum:{$gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})
并集 $or:[ { },{ },{ } ] 查看userid为1003并且 likenum字段小于1000的
db.comment.find({$or:[ {userid:"1003"} ,{likenum:{$lt:1000} }]})
选择切换数据库:use articledb
插入数据:db.comment.insert({bson数据})
查询所有数据:db.comment.find();
条件查询数据:db.comment.find({条件})
查询符合条件的第一条记录:db.comment.findOne({条件})
查询符合条件的前几条记录:db.comment.find({条件}).limit(条数)
查询符合条件的跳过的记录:db.comment.find({条件}).skip(条数)
修改数据:db.comment.update({条件},{修改后的数据}) 或db.comment.update({条件},{$set:{要修改部分的字段:数据})
修改数据并自增某字段值:db.comment.update({条件},{$inc:{自增的字段:步进值}})
删除数据:db.comment.remove({条件})
统计查询:db.comment.count({条件})
模糊查询:db.comment.find({字段名:/正则表达式/})
条件比较运算:db.comment.find({字段名:{$gt:值}})
包含查询:db.comment.find({字段名:{$in:[值1,值2]}})或db.comment.find({字段名:{$nin:[值1,值2]}})
条件连接查询:db.comment.find({$and:[{条件1},{条件2}]})或db.comment.find({$or:[{条件1},{条件2}]})
db.collection.getIndexes() 查看索引
db.collection.dropIndex(index) 索引的移除可以通过名称,或者指定规则删,如果不加index表示删除所有,其中_id是不允许删掉的
举例:db.comment.dropIndex({userid:1})
执行计划:来查看查询的情况,如果查询耗时的时间是否基于索引查询等
语法:db.collection.find(query,options).explain(options)
举例:
db.comment.find({userid:"1003"}).explain()
未加索引前:
加索引后:
涵盖查询: