1. MongoDB简介
MongoDB 是一个文档数据库,旨在简化应用程序开发和扩展。
mongodb采用文档式存储结构,存储结构分为四个层次:键值对、文档、集合、数据库。
文档数据库存储结构的基本单位是键值对,具体包含数据和类型。键值对的数据包含键和值,键的格式一般为字符串,值的格式可以包含字符串、数值、数组、文档等类型。
文档是mongodb的核心概念,是数据的基本单元,文档的数据结构和json基本相同,实际存储时是bson(binary json)。
文档存储在集合中,一个集合是由一些文档构成的对象。文档类似于关系型数据库的行,集合类似于表。同一个集合可以插入不同格式的文档,但是通常情况下一个集合中的文档应该具有相关性。
数据库包含多个集合,通常一个应用的所有数据存储到同一个数据库。
mongodb的最大优点是非常适合层级式的数据存储。举个简单例子,比如A对象包含B对象,B对象包含C对象,关系型数据库应该会存三个表,查询时也需要三个表进行关联。而文档数据库可以把ABC三个对象按照层级关系作为一个文档存储到一个集合中,整存整取。
此外,mongodb支持分布式存储,可以满足海量数据的存储和查询。
缺点:1)不支持事务;2)key字段占用额外空间
参考文档:
2. 安装MongoDB
参考文档:dockerhub mongo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| mkdir -p /data/mongo/{conf,data} docker run -d --name mongodb-tmp mongo:5.0.31 docker cp mongodb-tmp:/etc/mongod.conf.orig /data/mongo/conf docker rm -f mongodb-tmp
docker run -d --name mongodb \ --restart=always \ -v /data/mongo/conf/mongod.conf.orig:/etc/mongod.conf.orig \ -v /data/mongo/data:/data/db \ -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAME=admin \ -e MONGO_INITDB_ROOT_PASSWORD=password \ mongo:5.0.31
docker logs mongodb
|
3. 常用命令
3.1. 进入MongoDB容器
1
| docker exec -it mongodb /bin/bash
|
3.2. 登录数据库
1 2 3
| mongo --host localhost --port 27017 -uroot -p mongo --host localhost --port 27017 -uroot -p --authenticationDatabase=admin
|
其中authenticationDatabase参数指定认证数据库,如果不指定,默认是admin。这是因为Mongodb允许存在多个同名的用户存在,但同名的用户认证db必须不能相同。
3.3. 查看帮助
3.4. 操作数据库
1 2 3 4 5 6 7 8 9 10 11
| // 查看数据库 show dbs
// 切换数据库(不存在则创建) use local
// 查看当前数据库 db
// 退出 exit
|
3.5. 操作表
1 2 3 4 5 6 7
| // 查看有哪些表 show tables show collections
// 显示表中的全部内容 db.startup_log.find() db.startup_log.find().pretty()
|
3.6. 操作用户和权限
1 2 3 4
| use admin db.createUser({ user:'mongouser',pwd:'thepasswordA1',roles:[{ role:'readWrite', db: 'testdb'},"readWriteAnyDatabase"]}); db.auth('mongouser', 'thepasswordA1') use testdb
|
3.7. 导出导入数据
3.7.1. 整库导出导入
1 2 3 4 5 6 7
| mongodump --host 10.66.187.127:27017 -u mongouser -p thepasswordA1 --authenticationDatabase=admin --db=testdb -o /data/dump_testdb
mongodump --host 10.66.187.127:27017 -u mongouser --authenticationDatabase=admin --db=testdb -o /data/dump_testdb
mongorestore --host 10.66.187.127:27017 -u mongouser -p thepasswordA1 --authenticationDatabase=admin --dir=/data/dump_testdb
|
3.7.2. 单个集合导出导入
1 2 3 4 5 6
| mongoexport --host 10.66.187.127:27017 -u mongouser -p thepasswordA1 --authenticationDatabase=admin --db=testdb --collection=testcollection -o /data/export_testdb_testcollection.json
mongoimport --host 10.66.187.127:27017 -u mongouser -p thepasswordA1 --authenticationDatabase=admin --db=testdb --collection=testcollection2 --file=/data/export_testdb_testcollection.json
|
4. 重置密码
4.1. bin mongo重置密码
1、修改配置文件,取消用户验证
注释掉:
1 2
| #security: # authorization: enabled
|
2、重启mongo
1
| systemctl restart mongod
|
3、重置密码
1 2 3 4 5
| mongo > show dbs > use admin > db.system.users.find() > db.changeUserPassword("admin","xxx")
|
4、开启用户验证,重启mongo
4.2. docker mongo重置密码
1、启动重启密码容器
1
| docker run -it --name mongo-repair -d --volumes-from mongo mongo:4.2.11 --noauth
|
2、进入容器
1
| docker exec -it mongo-repair /bin/bash
|
3、重置密码
1 2 3 4 5
| mongo > show dbs > use admin > db.system.users.find() > db.changeUserPassword("admin","xxx")
|
4、启动原容器
1 2 3
| docker stop mongo-repair docker rm mongo-repair docker start mongo-repair
|