1.安装docker和docker-compose

1.1 安装docker软件
yum install -y docker

1.2 启动docker并将docker加入开机启动
systemctl start docker
systemctl enable docker

1.3 查看docker版本
docker version

1.4 安装docker-compose
安装epel源
yum install -y epel-release

安装docker-compose
yum install -y docker-compose

2.登录官网查看mongodb的版本号:

MongoDB Community Download | MongoDBDownload the Community version of MongoDB's non-relational database server from MongoDB's download center.https://www.mongodb.com/try/download/community

3.下载mongodb到个人虚拟机

服务器无法访问外网,个人虚拟机才可以访问外网
docker pull mongo:5.0.5  或者 docker pull mongo:latest

[root@mongodb mongodb-5.0.5]# docker pull mongo:5.0.5
Trying to pull repository docker.io/library/mongo ... 
5.0.5: Pulling from docker.io/library/mongo
Digest: sha256:517f98e5b796844475a985b78a3abbc72cbadd7497d0ee689cf8b8c9ad34f89e
Status: Downloaded newer image for docker.io/mongo:5.0.5
[root@mongodb mongodb-5.0.5]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mongo     5.0.5               dfda7a2cf273        27 hours ago        693 MB
docker.io/mongo     latest              dfda7a2cf273        27 hours ago        693 MB
docker.io/mongo     3.6.23              2f21415cb85f        7 months ago        453 MB
[root@mongodb mongodb-5.0.5]# 

4.打包镜像

docker save docker.io/mongo:3.6.23 > /root/mongo3.6.23.tar
docker save docker.io/mongo:5.0.5 > /root/mongo5.0.5.tar

将mongo5.0.5.tar文件从下载到本地,并上传到服务器

5.导入镜像:


在你的新的 Docker 实例中运行 docker load命令,并且指定 tar 镜像文件的位置。

docker load < /root/mongo5.0.5.tar

[root@localhost ~]# docker load < mongo5.0.5.tar 
9f54eef41275: Loading layer [==================================================>]  75.16MB/75.16MB
bfd77925f372: Loading layer [==================================================>]  338.4kB/338.4kB
b40b95ac3b69: Loading layer [==================================================>]  8.101MB/8.101MB
a137db1bf3f7: Loading layer [==================================================>]  15.43MB/15.43MB
0bca50f254cc: Loading layer [==================================================>]  2.048kB/2.048kB
efa3c98556d0: Loading layer [==================================================>]   5.12kB/5.12kB
eee3d55617fe: Loading layer [==================================================>]  3.584kB/3.584kB
5985099e565b: Loading layer [==================================================>]  598.1MB/598.1MB
f322ccf1f01a: Loading layer [==================================================>]  3.072kB/3.072kB
ec74e72b7dfb: Loading layer [==================================================>]  17.41kB/17.41kB
Loaded image: mongo:5.0.5
[root@localhost ~]# 

[root@localhost ~]# docker images|grep mongo
mongo                                         5.0.5               dfda7a2cf273        28 hours ago        693MB
[root@localhost ~]# 

6、修改镜像tag(如需)


$ docker tag [镜像ID]  [镜像名称]:[镜像标签]

7、安装mongodb

7.1 在宿主机上创建mongodb存放目录,用来做持久化。

mkdir -p /opt/XXXXXX/product/docker-containers/mongodb-5.0.5
cd /opt/XXXXXX/product/docker-containers/mongodb-5.0.5
mkdir db conf logs configdb

7.2、创建、编写配置文件mongod.conf


dbPath、path不建议改动,bindIp改为0.0.0.0以方便外部连接MongoDB

参考:

[root@mongodb conf]# cat mongod.conf 
storage:
   dbPath: /var/lib/mongodb
   journal:
      enabled: true
# engine:
# wiredTiger:

systemLog:
   destination: file
   logAppend: true
   path: /var/log/mongodb/mongod.log

net:
   bindIp: 0.0.0.0
   port: 27017

processManagement:
   timeZoneInfo: /usr/share/zoneinfo
[root@mongodb conf]# 

7.3、上传mongod.conf


上传 / 复制 / 创建 到:/opt/XXXXXX/product/docker-containers/mongodb-5.0.5/conf/
该路径由自己决定,即数据卷目录由自己决定,只要成功挂载并能启动MongoDB即可
(该路径与下方的创建容器并挂载目录一致)


7.4、创建容器并挂载目录


很多新手会面临1个问题:如何选择挂载目录?不知道选择哪个数据卷目录、容器目录来挂载;
下方的docker run的-v中,":"左边为数据卷目录,右边为挂载目录

docker run --name mongodb \
-p 27017:27017 \
-v /opt/XXXXXX/product/docker-containers/mongodb-5.0.5/db:/data/db \
-v /opt/XXXXXX/product/docker-containers/mongodb-5.0.5/conf/mongod.conf:/etc/mongod.conf.orig \
-v /opt/XXXXXX/product/docker-containers/mongodb-5.0.5/logs:/var/log/mongodb \
-v /opt/XXXXXX/product/docker-containers/mongodb-5.0.5/configdb:/data/configdb \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=<密码> \
--privileged=true \
--restart=always \
-d mongo:5.0.5

 7.5 登录数据库,验证密码,查看数据库

[root@localhost conf]# docker ps |grep mongo
bcba97cdcae8        mongo:5.0.5                                          "docker-entrypoint.s…"   21 seconds ago      Up 20 seconds       0.0.0.0:27017->27017/tcp   mongodb
[root@localhost conf]# 
[root@localhost conf]# docker exec -it mongodb /bin/bash
root@bcba97cdcae8:/# 
root@bcba97cdcae8:/# 
root@bcba97cdcae8:/# mongo
MongoDB shell version v5.0.5
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("7fb10250-bf10-43b9-b7fd-111746941b67") }
MongoDB server version: 5.0.5
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
        https://community.mongodb.com
> db.version();
5.0.5
> use admin;
switched to db admin
> db.auth("root","<密码>");
1
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
>

7.6 创建数据库、创建集合

1. 创建数据库qyqdb
use qyqdb
(注:这里还并没有在本地创建该数据库,需要在该数据库添加集合(表)之后才算真正创建了)

2. 创建user集合(表),也是插入数据
db.user.insert({"name":"小一",age:18})
db.user.insert({"name":"小二",age:19})
db.user.insert({"name":"张三",age:20})
db.user.insert({"name":"赵四",age:21})
db.user.insert({"name":"王老五",age:22})
db.user.insert({"name":"李老六",age:23})
db.user.insert({"name":"阮小七",age:24})
db.user.insert({"name":"郑八哥",age:25})

注意:mongodb的数据和json数据一样,格式要正确

3.查看创建的数据库
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
qyqdb   0.000GB


4.显示当前数据集合show collections
> show collections
user

7.7 条件查询

--条件查询,查询age=18的数据
> db.user.find({"age": 18})      
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039662"), "name" : "小一", "age" : 18 }

--条件查询,查询age>24的数据$gt
> db.user.find({"age": {$gt: 24}})  
{ "_id" : ObjectId("61b1bb205b33d3cc45039669"), "name" : "郑八哥", "age" : 25 }

--条件查询,查询age>=24的数据$gte
> db.user.find({"age": {$gte: 24}})
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039668"), "name" : "阮小七", "age" : 24 }
{ "_id" : ObjectId("61b1bb205b33d3cc45039669"), "name" : "郑八哥", "age" : 25 }

--条件查询,查询age<20的数据$lt
> db.user.find({"age": {$lt: 20}})
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039662"), "name" : "小一", "age" : 18 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039663"), "name" : "小二", "age" : 19 }

--条件查询,查询age<=20的数据$lte
> db.user.find({"age": {$lte: 20}})
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039662"), "name" : "小一", "age" : 18 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039663"), "name" : "小二", "age" : 19 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039664"), "name" : "张三", "age" : 20 }

--模糊查询,查询name包含‘老’字的数据/老/
> db.user.find({"name": /老/})
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039666"), "name" : "王老五", "age" : 22 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039667"), "name" : "李老六", "age" : 23 }

--模糊查询,查询name以‘李’字开头的数据/^李/
> db.user.find({"name": /^李/})
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039667"), "name" : "李老六", "age" : 23 }

--模糊查询name以‘七’结尾的数据/七$/
> db.user.find({"name": /七$/})
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039668"), "name" : "阮小七", "age" : 24 }

--查询指定列(字段)的数据,如name,age
下面只查询name的字段, 注意:要查询那个字段就写该字段=1,比如{name: 1},如果只查询age字段就{age: 1},_id是自带的。
> db.user.find({},{name: 1})
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039662"), "name" : "小一" }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039663"), "name" : "小二" }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039664"), "name" : "张三" }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039665"), "name" : "赵四" }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039666"), "name" : "王老五" }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039667"), "name" : "李老六" }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039668"), "name" : "阮小七" }
{ "_id" : ObjectId("61b1bb205b33d3cc45039669"), "name" : "郑八哥" }

--排序查询sort,升序:1,降序:-1
--升序
> db.user.find().sort({age: 1})
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039662"), "name" : "小一", "age" : 18 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039663"), "name" : "小二", "age" : 19 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039664"), "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039665"), "name" : "赵四", "age" : 21 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039666"), "name" : "王老五", "age" : 22 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039667"), "name" : "李老六", "age" : 23 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039668"), "name" : "阮小七", "age" : 24 }
{ "_id" : ObjectId("61b1bb205b33d3cc45039669"), "name" : "郑八哥", "age" : 25 }

--降序
> db.user.find().sort({age: -1})
{ "_id" : ObjectId("61b1bb205b33d3cc45039669"), "name" : "郑八哥", "age" : 25 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039668"), "name" : "阮小七", "age" : 24 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039667"), "name" : "李老六", "age" : 23 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039666"), "name" : "王老五", "age" : 22 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039665"), "name" : "赵四", "age" : 21 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039664"), "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039663"), "name" : "小二", "age" : 19 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039662"), "name" : "小一", "age" : 18 }

--查询前2条数据limit
> db.user.find().limit(2)
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039662"), "name" : "小一", "age" : 18 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039663"), "name" : "小二", "age" : 19 }

--查询第4条(不包含第4条)之后的数据skip
注意: 计数从0开始
> db.user.find().skip(4)
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039666"), "name" : "王老五", "age" : 22 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039667"), "name" : "李老六", "age" : 23 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039668"), "name" : "阮小七", "age" : 24 }
{ "_id" : ObjectId("61b1bb205b33d3cc45039669"), "name" : "郑八哥", "age" : 25 }

--到这里可以结合limit实现分页查询,比如查询第4条到第6条数据(实际5,6两条)
> db.user.find().skip(4).limit(2)
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039666"), "name" : "王老五", "age" : 22 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039667"), "name" : "李老六", "age" : 23 }

--or 和 查询 $or
查询age=20或者age=22的数据
> db.user.find({$or: [{"age": 20},{"age": 22}]})
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039664"), "name" : "张三", "age" : 20 }
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039666"), "name" : "王老五", "age" : 22 }

--查询第一条数据findOne
> db.user.findOne()
{ "_id" : ObjectId("61b1bb1f5b33d3cc45039662"), "name" : "小一", "age" : 18 }

查询数据数量(长度)count
> db.user.find().count()
8

7.8 创建用户、查看用户

查看用户:
> use admin
switched to db admin
> db.getUsers();
[
        {
                "_id" : "admin.root",
                "userId" : UUID("6e351088-725c-4058-9b5f-e5fa6148be61"),
                "user" : "root",
                "db" : "admin",
                "roles" : [
                        {
                                "role" : "root",
                                "db" : "admin"
                        }
                ],
                "mechanisms" : [
                        "SCRAM-SHA-1",
                        "SCRAM-SHA-256"
                ]
        }
]
> 

--创建角色
> db.createRole({role:"r_dbmon",privileges:[
... {resource:{db:"",collection:"system.indexes"},actions:["find"]},
... {resource:{db:"",collection:"system.namespaces"},actions:["find"]},
... {resource:{db:"",collection:"system.js"},actions:["find"]},
... {resource:{db:"admin",collection:""},actions:["changeOwnPassword"]}],
... roles:[{role:"clusterMonitor",db:"admin"},
... {role:"readAnyDatabase",db:"admin"}]
... });
{
        "role" : "r_dbmon",
        "privileges" : [
                {
                        "resource" : {
                                "db" : "",
                                "collection" : "system.indexes"
                        },
                        "actions" : [
                                "find"
                        ]
                },
                {
                        "resource" : {
                                "db" : "",
                                "collection" : "system.namespaces"
                        },
                        "actions" : [
                                "find"
                        ]
                },
                {
                        "resource" : {
                                "db" : "",
                                "collection" : "system.js"
                        },
                        "actions" : [
                                "find"
                        ]
                },
                {
                        "resource" : {
                                "db" : "admin",
                                "collection" : ""
                        },
                        "actions" : [
                                "changeOwnPassword"
                        ]
                }
        ],
        "roles" : [
                {
                        "role" : "clusterMonitor",
                        "db" : "admin"
                },
                {
                        "role" : "readAnyDatabase",
                        "db" : "admin"
                }
        ]
}


--创建用户并授权访问admin
> db.createUser({user:"dbmon",pwd:"<密码>",roles:[{role:"r_dbmon",db:"admin"}]})
Successfully added user: {
        "user" : "dbmon",
        "roles" : [
                {
                        "role" : "r_dbmon",
                        "db" : "admin"
                }
        ]
}

--查看用户
> db.getUsers();
[
        {
                "_id" : "admin.dbmon",
                "userId" : UUID("e1a69658-641a-4b82-98b5-1965bcc2b196"),
                "user" : "dbmon",
                "db" : "admin",
                "roles" : [
                        {
                                "role" : "r_dbmon",
                                "db" : "admin"
                        }
                ],
                "mechanisms" : [
                        "SCRAM-SHA-1",
                        "SCRAM-SHA-256"
                ]
        },
        {
                "_id" : "admin.root",
                "userId" : UUID("6e351088-725c-4058-9b5f-e5fa6148be61"),
                "user" : "root",
                "db" : "admin",
                "roles" : [
                        {
                                "role" : "root",
                                "db" : "admin"
                        }
                ],
                "mechanisms" : [
                        "SCRAM-SHA-1",
                        "SCRAM-SHA-256"
                ]
        }
]
> 

参考:mongodb创建数据库,创建集合(表),实现增删改查_YanGo的博客-CSDN博客_mongodb创建数据集mac上安装mongodb传送门目录首先在终端上,我们先执行`mongo`来启动运行mongodb一. 查看所有数据库二. 创建数据库yango_db三. 创建user集合(表),也是插入数据四. 显示当前数据集合五. 删除当前集合六. 删除数据库七. 查询数据1. 查询user集合所有数据2. 条件查询,查询age=18的数据3. 条件查询,查询age>24的数据`$gt`4. 条件查询,查询age>=24的数据`$gte`5. 条件查询,查询age<20的数据`$lt`6. 条件查https://blog.csdn.net/weixin_39644462/article/details/112449109

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐