原创

mongodb

MongoDB基础

一、MongoDB是什么?

MongoDB 是一个文档数据库同时也是非关系型数据库,为简化应用程序的开发与扩展而设计。比较适合存储大量的没有规则、无序的数据。未经过处理的数据。

二、安装MongoDB

1.创建文件夹上传包
mkdir -p /opt/soft/mongodb

1742787973719

2.解压到安装目录 并移动
tar xvf mongodb-linux-x86_64-rhel62-3.6.5.tgz
mv mongodb-linux-x86_64-rhel62-3.6.5 /usr/local/mongodb
3.创建数据存储目录和日志目录
cd /usr/local/mongodb
mkdir data
mkdir logs
4.启动mongod服务
cd /usr/local/mongodb/bin
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/log.txt --fork
#参数介绍:
#dbpath 数据存储路径
#logpath 日志存储路径  指向到一个文件
#fork  后台启动
#auth  权限开启
#bind_ip  指定绑定网卡ip
#可以通过进程和端口的方式检测是否启动成功
ps aux|grep mongod
netstat -lntp|grep mongod

1742788067652

三、MongoDB客户端操作

1.登录客户端
cd /usr/local/mongodb/bin
./mongo
2.查看所有数据库
show dbs

1742788322535

3.切换数据库和获取当前数据库
use dbname
db.getName()

1742788452326

四、MongoDB配置

1.使用远程登录

使用一台mongo远程登录另外一台mongo

mongo 远程的ip
mongo 192.168.170.132
2.限制登录

由于默认情况下不允许使用ip进行登录,所以需要解除限制

2.1 关闭MongoDB

正常情况下不要kill -9 mongod,使用mongo命令客户端里的关机命令

-- 先登录到MongoDB然后切换adim用户
use admin
-- 然后执行下面命令停止数据库
db.shutdownServer()

2.2 创建配置文件
#创建一个文件夹
/usr/local/mongodb/conf
vim /usr/local/mongodb/conf/mongodb.conf
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongodb.log
fork=true
logappend=true
port=27017
auth=false
bind_ip=127.0.0.1,192.168.180.132

2.3 创建系统管理
#vim /usr/lib/systemd/system/mongodb.service
[Unit]
Description=MongoDB
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
ExecReload=/bin/ki11 -S HUP SMAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown -f /usr/local/mongodb/conf/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target

2.3 启动
systemctl start mongodb
或
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf

2.4 给客户端软链接
ln -s /usr/local/mongodb/bin/mongo /usr/sbin/mongo

2.5 登录

1744082716054

五、CURD

1.插入数据
1.1 普通数据添加
语法:db.集合名称.insert(bson格式数据)
db.user.insert({name:'heber',age:18})
或
db.user.insert({
   name:'heber',
   age:18
})

1.2 多维数据对象添加
db.user.insert({name:'heber',age:18,addr:{province:'cq',city:'cq'}})
或
db.user.insert({
  name:'heber',
  age:18,
  addr:{
     province:'cq',
     city:'cq'
  }
})

1.3 插入数组数据
db.user.insert({name:'heber',age:18,addr:{province:'cq',city:'cq'},hobby:['gitar','ops']})
或
db.user.insert({
  name:'heber',
  age:18,
  addr:{
     province:'cq',
     city:'cq'
  },
  hobby:['gitar','ops']
})

2.查询数据
2.1 普通查询
语法:db.集合名称.find()   (无格式)
或
db.集合名称.findOne()     (带格式,但是只会取出一条数据)
db.user.find()
db.user.find().pretty()  (查询所有的并带格式)
db.user.findOne()

1742789023603

2.2 条件查询
语法:db.集合名称.find({查询条件})   (无格式)
或
db.集合名称.findOne({查询条件})     (带格式,但是只会取出一条数据)
db.user.find({name:'heber'})
db.user.find({name:'heber'}).pretty()  (查询所有的并带格式)
db.user.findOne({name:'heber'}

1744076649580

2.3 范围查询
-- mysql中   <     <=     >     >=      !=
-- mongo中   $lt   $lte   $gt   $gte    $ne
-- 查询年龄大于等于18的
db.user.find({age:{'$gte':18}}).pretty() 

1744077045304

2.4 多字段查询

类似mysql的and

db.user.find({name:"heber1",age:{'$gte':18}}).pretty()

1744077336654

2.5 多维字段查询
db.user.find({"addr.city":"cq"}).pretty()

1744077560695

2.6 数组条件查询
db.集合名称.find({字段(数组):{'$all':[v1,v2]}})
db.user.find({hobby:{'$all':['gitar','ops']}}).pretty()

1744077899479

2.7 限定字段查询

类似mysql:select name,age from user;

--语法:db.集合名称.find({查询条件},{筛选条件})
--显示为1,不显示为0   要是1都是1,要是0都是0  _id除外
db.user.find({hobby:{'$all':['gitar','ops']}},{name:1,age:1}).pretty()

1744078229531

2.8 多条件或查询
db.user.find({'$or':[{name:'heber1'},{age:18}]}).pretty()

1744079441370

2.9 count 语法
db.user.count()
db.user.find({age:{'$gte':18}}).count()
db.user.count({age:{'$gte':18}})

1744079563408

3.修改数据

语法:db.集合名称.update({查询条件},{修改条件})

​ updateOne() 修改匹配的第一条

​ updateMany() 修改匹配所有条

3.1 有$set的修改
db.user.update({name:'heber'},{'$set':{age:20}})
db.user.updateOne({name:'heber'},{'$set':{age:20}})

3.2 无$set的修改

没有$set关键字语法,把设置的字段进行修改,没有设置的就会被删除掉

db.user.update({name:'heber'},{age:20})

4.删除数据

语法: db.集合名称.remove({查询条件})

​ deleteOne() 删除匹配的第一条

​ deleteMany() 删除匹配的多条

db.user.remove({name:'heber1'})
db.user.deleteMany({name:{'$lte':'heber1'}})

4.1 删除字段

可以删除某个字段的操作,使用的是update语法的$unset

db.user.update({name:'heber1'},{'$unset':{age:0}})

六、安全设置

1.用户权限管理

超级管理员账户,对于所有库具有读写权限

-- 登录MongoDB
语法:db.createUser({user:"用户名",pwd:"密码",roles:["角色"]})
-- 切换admin
use admin
-- 创建用户
db.createUser({user:"root",pwd:"123456",roles:["root"]})

1744083637264

关闭mongod服务,重启添加权限参数并启动

systemctl stop mongodb

修改配置文件

#vim /usr/local/mongodb/conf/mongodb.conf
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongodb.log
fork=true
logappend=true
port=27017
auth=false
bind_ip=127.0.0.1,192.168.180.132

#把auth=false修改为auth=true这样以后就都需要账号密码登录

启动

systemctl start mongodb

此时登录后查询会显示没有权限查询

1744084627626

切换到admin

use admin
#获取用户信息
db.getUsers()
#然后登录已有的用户
db.auth('root','123456')

此时就有权限操作

1744084934224

七、MongoDB备份与还原

1.备份
1.1 全库备份
/usr/local/mongodb/bin/mongodump -h 192.168.180.132 -u root -p 123456 --authenticationDatabase=admin
#备份后的数据存放在
dump 目录中

1.2 指定库备份
/usr/local/mongodb/bin/mongodump -h 192.168.180.132 -u root -p 123456 --authenticationDatabase=admin -d user -o /tmp/mongo_bak

2.还原
/usr/local/mongodb/bin/mongorestore -h 192.168.180.132 -u root -p 123456 --authenticationDatabase=admin -d user --dir /tmp/mongo_bak/user

mongodb
  • 作者:shi(联系作者)
  • 发表时间:2025-04-11 20:57:47
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 评论