MongoDb安装和使用
MongoDB 概述
- Mongo是一个基于分布式文件存储的Nosql数据库。Nosql数据库还包含redis、hbase等。它以 BSON(Binary JSON)格式存储数据。它提供了高性能、可扩展性和高可用性,是处理大规模数据和快速变化的应用场景的理想选择。MongoDB 的文档模型灵活,允许嵌套的数据结构,支持复杂的查询和聚合操作。
MongoDB 业务场景
- 社交场景, 使用 MongoDB 存储存储用户信息, 以及用户发表的朋友圈信息, 通过地理位置索引实现附近的人, 地点等功能。
- 游戏场景, 使用 MongoDB 存储游戏用户信息, 用户的装备, 积分等直接以内嵌文档的形式存储, 方便查询, 高效率存储和访问。
- 物流场景, 使用 MongoDB 存储订单信息, 订单状态在运送过程中会不断更新, 以 MongoDB 内嵌数组的形式来存储, 一次查询就能将订单所有的变更读取出来.。
- 物联网场景, 使用 MongoDB 存储所有接入的智能设备信息, 以及设备汇报的日志信息, 并对这些信息进行多维度的分析。
- 视频直播, 使用 MongoDB 存储用户信息, 点赞互动信息等。
MongoDB基本概念
- 数据库(Database):MongoDB 中的数据库相当于一个命名空间,用于组织和管理集合。
- 集合(Collection):集合是 MongoDB 中类似于关系型数据库中的表,用于存储一组文档。
- 文档(Document):文档是 MongoDB 中的基本存储单元,以 BSON 格式存储,类似于关系型数据库中的行。
实例:
{
"_id": "34503745034580368086456")
"name": "ernesto",
"age": 20,
"email": "ernesto@example.com"
}
MongoDB的下载和安装
mongoDB的下载
- mongoDB的官网地址
https://www.mongodb.com/try/download/community-kubernetes-operator
- 可选择不同的版本(版本命名规范为x.y.z,y为基数是表示当前版本为开发版,y为偶数是表示当前版本为稳定版本,z是修正版本号,越大越好),不同的操作系统(windows、linux等)和安装方式(zip免安装、msi安装文件)。
mongoDB的安装
- 将下载的安装包上传到服务器,并解压
上传文件:rz 选择文件 mongodb-linux-x86_64-4.0.10.tgz
解压文件:tar -zxvf mongodb-linux-x86_64-4.0.10.tgz
- 在bin的同级目录创建数据存储目录 mkdir -p single\data\db
- 在bin的同级目录创建日志存储目录 mkdir -p single\log
- 在bin的同级目录创建配置文件 single\mongod.conf
- 编辑配置文件,进行相应的配置
mongod.conf配置文件内容
systemLog:
#mongodb发送所有日志输出的目标指定为文件information
destination: file
#日志存储路径
path: "/data/mongoDb/single/log/mongod.log"
#当mongo重启时,将新的日志追加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储数据目录,storage.dbpath设置仅适用于mongod
dbPath: "/data/mongoDb/single/data/db"
#journal:
#启动或禁用持久性日志以确保数据文件保持有效和可恢复
# true 启用;false 不启用
# 64 位系统默认启用,启用后 MongoDB 可以在宕机后根据持久性日志进行恢复
#在6.1 及其以上的 MongoDB 版本中,我们无需也不能通过配置文件中的配置项 storage.journal.enabled 或者通过命令行参数 --journal 和 --nojournal 配置 MongoDB 的 journal 是否开启,因此,如果在使用配置文件的方式启动 MongoDB 时报错 Unrecognized option: storage.journal.enabled,我们只需将配置文件中如下的内容进行删除即可
#enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式
fork: true
net:
#服务实例绑定的ip,默认是localhost,也可以指定ip,如localhost,192.168.10.8
bindIp: 0.0.0.0
#绑定的端口,默认是 27017
port: 27017
mongoDB启动
../bin/mongod -f mongod.conf
- 出现successfully则说明启动成功,也可以查看启动的进程
mongoDB连接
1.使用命令直接连接
../bin/mongo --host=localhost
或
../bin/mongo --host=localhost --port=27017
2.使用Navicat进行连接
3.使用MongoDB自带的可视化工具Compass
- MongoDB Compass 是 MongoDB 官方提供的一款图形化用户界面 (GUI) 工具,用于与 MongoDB 数据库进行交互和管理。
数据库基本操作指令
1.查看数据库
show databases;
show dbs;
2.选择数据库
use database[数据库名称] 选择不存在的数据库会隐式创建该数据库
use admin;
3.删除数据库
先选择到要删除的数据库
use test_db;
db.dropDatabase();
4.查看集合
show collections;
5.创建集合
db.createCollection('集合名称')
6.删除集合
db.集合名.drop()
增删改查
insert
db.集合名.insert(JSON数据)
单条插入
use test_db
db.sysuer.insert({name:'ernesto',age:20})
- 数据库和集合不存在时,都隐式创建
- mongodb会给每条数据添加一个唯一的ID
多条插入
use test_db
db.sysuer.insert([{name:'gavin',age:25},{name:'张三',age:30}])
插入N条数据
db.sysuer.insertMany({})
db.sysuer.insertMany([{name:"test1",age:18},{name:"test2",age:18}])
- mongodb底层使用JS引擎实现的,所以支持部分js语法,可以使用for循环
use test_db
for(var i=1;i<=10;i++){
db.sysuer.insert({name:"ernesto"+i,age:i})
}
delete
db.集合名.remove(条件[,是否删除一条])
是否删除一条 true是,false否 默认
db.sysuer.remove({name:'ernesto1'},true)
update
db.集合名.update(条件,新数据[,是否新增,是否修改多条])
是否新增:指条件匹配不到数据则插入,true是插入,false否不插入默认
是否修改多条:指将匹配成功的数据都修改(true是,false否默认)
这样是替换,将符合条件的行直接换成这个
db.sysuer.update({name:'test'},{name:'test001'})
运算符 | 作用 |
---|---|
$inc | 递增 |
$rename | 重命名列 |
$set | 修改列值 |
$unset | 删除列 |
- 升级语法:
1.修改name的值
db.sysuer.update({name:'test'},{$set:{name:'test002'}})
2.给test002 增加2岁
db.sysuer.update({name:'test002'},{$inc:{age:2}})
3.给test002 减少5岁
db.sysuer.update({name:'test002'},{$inc:{age:-5}})
4.插入一条数据
db.sysuer.insert({name:"ernesto",age:18,sex:'男',job:'it行业'})
修改数据,将 ernesto 改为 gavin ,age 改为999 ,sex 改为 birthday,job删除
db.sysuer.update({name:"ernesto"},{
$set:{name:"gavin"},
$inc:{age:981},
$rename:{sex:"birthday"},
$unset:{job:true}
})
5.更新不存在的值,若不存在则不会有操作
db.sysuer.update({name:'ernesto'},{$set:{name:'张三'}})
在最后加一个true参数,作用是,如果不存在,则插入该条数据,默认为false则不管
db.sysuer.update({name:'ernesto'},{$set:{name:'张三'}},true)
query
- 语法: db.集合名.find(条件,[查询的列])
- 格式化:db.集合名.find().pretty()
条件:
查询所有数据 {}或者不写
查询age=6的数据 {age:6}
查询age=6且性名称为gavin {age:6,name:'gavin'}
查询的列
不写 - 查询全部的列
{age:1} 只显示age列,可以显示多个想要的列{name:1,age:1.......}
{age:0} 除了age列外都显示 可以不显示多个想要的列{name:0,age:0}
无论怎么写系统自定义_id都会在
运算符 | 作用 |
---|---|
$gt | 大于 |
$gte | 大于等于 |
$lt | 小于 |
$lte | 小于等于 |
$ne | 不等于 |
$in | in |
$nin | Not in |
- 升级语法:
db.集合名.find(键:值)
年龄小于100的
db.sysuer.find({age:{$lt:100}})
db.集合名.find({ 键:{运算符:值} })
年龄等于15、999的
db.sysuer.find({age:{$in:[15,999]}})