本文使用Docker安装MongoDB,首先安装Dokcer
适合操作系统: ubuntu18
Docker安装
# 卸载旧版本
sudo apt-get purge docker-ce
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo rm -rf /var/lib/docker
# 安装curl工具
sudo apt-get install curl -y
# 使用官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 使得当前账户也能使用docker命令,若生效,可能需要重新登录或重启虚拟机
sudo usermod -aG docker ${USER}
若使用ubuntu18,可使用以下命令安装,docker的版本也是比较新的。
sudo apt-get update
# 卸载旧版本
sudo apt-get purge docker-ce
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo rm -rf /var/lib/docker
# 安装docker
sudo apt install docker.io -y
# 使得当前账户也能使用docker命令,若生效,需要重新登录
sudo usermod -aG docker ${USER}
MongoDB安装
# 拉取官方镜像
sudo docker pull mongo
# 创建docker db挂载目录
mkdir /home/${USER}/docker/db/mongodb
# 运行刚刚拉取的镜像mongo,容器名:mongodb
docker run -p 27017:27017 -v /home/${USER}/docker/db/mongodb:/data/db --restart=always --name=mongodb -d mongo
MongoDB创建账户
# 进入docker mongodb终端
docker exec -it mongodb bash
# 弹出root@966de5e17b68:/#,输入mongo
mongo
# 在数据库admin下创建超级用户admin
use admin
db.createUser({
user:"admin", pwd:"admin", roles: [{
role : "userAdminAnyDatabase", db:"admin"}]})
db.auth("admin","admin")
# 切换至数据库iot
use iot
# 为数据库iot创建用户iotcloud
db.createUser({
user:"iotcloud",pwd:"iotcloud",roles:[{
role:"readWrite",db:"iot"}]})
MongoDB索引管理
随着业务的发展,可能有些索引不再需要,或者需要新建索引。
以数据库iot中的集合dev_msg_log为例:
# 进入docker mongodb终端
docker exec -it mongodb bash
# 弹出root@966de5e17b68:/#,输入mongo
mongo
use iot
# 查看所有的索引
db.dev_msg_log.getIndexes();
# 查看所有索引的大小,单位是字节
db.dev_msg_log.totalIndexSize()
# 根据索引name,删除指定的索引,比如删除name为“testidx”的索引
db.dev_msg_log.dropIndex("testidx");
# 创建新的索引,在后台根据字段attr1、attr2、attr3创建组合索引,索引名称“anotheridx”
db.dev_msg_log.ensureIndex({
attr1:-1, attr2:-1, attr3:1},{
name:"anotheridx", background:true})
查询分析
queryPlanner
查询分析可以帮助设计索引
db.body_sensor_log.find({
"deviceId":"FF81BBDCB109FCE76B116779F2B5E425196801BF","uuid":"1F-FF-FF-FF-FF-FF","attr":0}).sort({
"createTime":-1}).limit(1).explain();
得到如下结果:
{
"queryPlanner": {
"plannerVersion": 1,
"namespace": "iot.body_sensor_log",
"indexFilterSet": false,
"parsedQuery": {
"$and": [
{
"attr": {
"$eq": 0
}
},
{
"deviceId": {
"$eq": "FF81BBDCB109FCE76B116779F2B5E425196801BF"
}
},
{
"uuid": {
"$eq": "1F-FF-FF-FF-FF-FF"
}
}
]
},
"queryHash": "B9F93D3B",
"planCacheKey":