MongoDB笔记
数据库排名:https://db-engines.com/en/ranking
MongoDB安装与配置
官方网站:https://www.mongodb.com/
yum安装方式:
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat
手动通用安装:
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-linux
解压mongodb包
# tar -xvf mongodb-linux-x86_64-4.0.10.tgz
# mv mongodb-linux-x86_64-4.0.10 /usr/local/mongodb
创建存储目录与日志目录
# cd /usr/local/mongodb
# mkdir data logs
启动mongodb
# cd /usr/local/mongodb
# bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --fork
MongoDB里存储数据的格式文档形式,以BSON格式的文档形式:
mongodb库中的一些命令操作:
# cd /usr/local/mongodb
# bin/mongo =>进入mongodb库
> show dbs =>显示所有数据库
> use 数据库名称 =>切换数据库,没有则自动创建同名的数据库
> db.getName() =>获取当前数据库的名称
> db.集合名称.insert(BSON格式的数据) =>插入数据
> db.集合名称.find()=>显示集合中的所有数据(无格式)可以结合pretty()方法进行数据格式化输出
> db.集合名称。findOne() =>只显示集合中满足条件的第一条数据(带格式)
案例:在abc数据库中创建一个goods的集合(集合===数据表),插入一条数据(title=>huawei p40、price=>5999.00、weight=>135)
> use abc
> db.goods.abc({title:"huawei p40",price:5999.00,weight:135})
或者可以分行输入
> db.goods.abc({
title:"huawei p40",
price:5999.00
weiht:135
})
☆插入多维数据
案例:向产品集合中插入一个文档(title=>mi 10,price=>3999.00,weight=>130,area=>hubei wuhan
> db.goods.insert({title:"mi 10",price:3999.00,weight:130,area:{province:"hubei",city:"wuhan"}})
或
> db.goods.insert({
title:"mi 10",
price:3999.00,
weight:130,
area:{
province:"hubei",
city:"wuhan"
}
})
☆ 插入数组型数据
案例:向产品集合中插入一个文档(title=>iphone xr,price=>6888.00,weight=>140,area=>guangdong shenzhen,color:red,golden,blue,black)
> db.goods.insert({
title:"iphone xr",
price:6888.00,
weight:140,
area:{
province:"guangdong",
city:"shenzhen"
},
color:["red","golden","blue","black"]
})
MongoDB查询数据
普通查询
> db.集合名称.find() =>显示集合中的所有数据(无格式)
> db.集合名称.findOne() =>只显示集合中满足条件的第一条数据(带格式)
条件查询
> db.集合名称.find({BSON格式的查询条件})
> db.集合名称.findOne({BSON格式的查询条件})
范围查询
mysql < <= > >= !=
mongo $lt $lte $gt $gte $ne
$lt = litter than =>小于
$lte = litter than equal =>小于等于
$gt = greater than =>大于
$gte = greater than equal =>大于等于
$ne = not equal =>不等于
多字段范围查询
案例:查询手机价格大于5000且weight重量大于130g的手机信息
> db.goods.find({
price:{'$gt':5000},
weight:{'$gt':130}
}).pretty()
多维字段查询
案例:查询手机产地在hubei wuhan的产品信息
> db.goods.find({'area.city':'wuhan'}).pretty()
数组条件查询
> db.goods.find({color:'black'}) => 查询满足其中之一即可显示
> db.集合名称.find({字段(数组):{'$all':[v1,v2]}})
> db.goods.find({color:{'$all':['black','gold']}}) => 满足查询条件所有的才可显示
限定字段查询
语法:db.集合名称.find({查询条件},{筛选条件})
显示为1,不显示为0
特别注意:field要是1必须所有都是1,要是0必须都是0,_id除外
案例:只显示产品集合中的title与price两个字段
> db.goods.find({},{title:1,price:1})
多条件或查询
> db.goods.find({'$or':[{price:{'$gt':5000}},{weight:{'$lt':140}}]})
排序查询
> db.goods.find().sort({字段:1或-1})
选项说明:
1代表正序排列,1 2 3 4
-1代表倒叙排列,4 3 2 1
count总记录查询
> db.goods.count()
> db.goods.find({price:{'$gt':5000}}).count()
> db.goods.count({price:{'$gt':5000}})
skip与limit限制查询
skip:跳过几个文档,定义从哪个位置开始查询,其默认值为0,代表从第一条数据开始
limit:限制数据的查询数量
> db.goods.find().limit(1);
> db.goods.find().skip(1).limit(1);
MongoDB修改数据
基本语法:
> db.集合名称.updateOne({查询条件},{修改条件}) 修改匹配的第一条
> db.集合名称.updateMany({查询条件},{修改条件}) 修改匹配的所有条
老版本的MongoDB其修改主要是通过db.集合名称.update({查询条件},{修改条件})
$set(标准)修改
> db.goods.updateOne({_id:ObjectId("5f63153786823f56134e2da4")},{'$set':{'price':3500}})
或
> db.goods.updateOne({
_id:ObjectId("5f63153786823f56134e2da4")},
{'$set':{'price':3500}}
)
> db.goods.updateOne({title:'huawei p40'},{'$set':{number:100}})
update命令与无 s e t 的 修 改 ( 慎 用 ) 没 有 set的修改(慎用) 没有 set的修改(慎用)没有set关键字语法,把设置的字段进行修改,没有设置的就会被删除掉
> db.goods.update({title:'iphone xr'},{title:'xr'})
MongoDB删除数据
☆ 删除记录
> db.集合名称.deleteOne({删除条件}) 删除匹配的第一条
> db.集合名称.deleteMany({删除条件}) 删除匹配的多条
老版本MongoDB => db.集合名称.remove({查询条件})
☆ 删除字段
可以删除某个字段的操作,使用的是update语法的$unset
>db.goods.update({title:'huawei p40'},{'$unset':{weight:135}})
MongoDB的安全设置
关闭mongodb,添加conf/mongodb.conf文件
>use admin
>db.shutdownServer()
# cd /usr/local/mongodb
# mkdir conf
# vim 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,10.1.1.26 => 允许远程连接IP地址,也可以是0.0.0.0
添加mongodb.service脚步用systemctl来控制
# 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/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown -f /usr/local/mongodb/conf/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# chmod +x /usr/lib/systemd/system/mongodb.service
# systemctl daemon-reload
用户权限
第一步:登录MongoDB,创建一个管理员账号
> use admin
> db.createUser({user:"root",pwd:"root",roles:["root"]})
第二步:关闭MongoDB
# systemctl stop mongodb
第三步:在配置文件mongodb.conf中加入auth参数
# vim conf/mongodb.conf
...
auth=true
...
第四步:重启MongoDB
# systemctl start mongodb