![df73e38a0c37bddcc961b1cbc2bb8927.png](https://i-blog.csdnimg.cn/blog_migrate/da2a4c81551129c25bd9343decf900db.jpeg)
MongoDB相对于RDBMS的优势
- 模式少 -MongoDB是一个文档数据库,其中一个集合包含不同的文档。一个文档之间的字段数,内容和文档大小可能会有所不同。
- 单个对象的结构清晰。
- 没有复杂的联接。
- 深入的查询能力。MongoDB支持使用与SQL几乎一样强大的基于文档的查询语言对文档进行动态查询。
- sql Tuning(优化)
- 易于扩展
- 不需要将应用程序对象转换/映射到数据库对象。
- 使用内部存储器存储(窗口式)工作集,从而可以更快地访问数据
RDBMS:关系数据库管理系统
为什么要使用MongoDB
- 面向文档的存储,BSON格式存储,即Binary JSON
- 单键索引、复合索引、多键索引、地理空间索引、全文本索引和哈希索引
- MongoDB实现高可用 主从复制
- 自动分片 auto sharding
- 丰富的查询
- 快速原地更新(fast in-place updates):大部分更新操作无需申请新空间
- MongoDB的专业支持map/reduce支持
- Gridfs:各种size大小的集群文件支持
在哪里使用MongoDB
- 大数据
- 内容管理和交付
- 移动和社交基础设施
- 用户数据管理
- 数据中心
docker-compose 快速启动 MongoDB
docker-compose.yml
version: '3' services: mongodb: image: mongo:4.2.6 # 镜像:版本 container_name: mongo_db environment: - MONGO_INITDB_DATABASE=默认的数据库 - MONGO_INITDB_ROOT_USERNAME=你的root管理员名称 - MONGO_INITDB_ROOT_PASSWORD=你的root管理员名称密码 volumes: - ./mongo/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro - ./mongo/mongo-volume:/data/db ports: - "27017-27019:27017-27019" restart: always
init-mongo.js
// db.getSiblingDB() 相当于 use admin; db.getSiblingDB('admin') .createUser({ user: 'user', pwd: 'user', roles: ['readWrite'] });
然后执行命令
docker-compose up -d
Navicat Premium连接
![2f4a6cb125b5d7ad821d992cc6025b1a.png](https://i-blog.csdnimg.cn/blog_migrate/21390a6fb718eee247d47563e7e56555.jpeg)
填入上述 docker-compose.yml 对应的参数
测试连接,测试成功
![48cabd9dff3bd540ba5f31675728c59c.png](https://i-blog.csdnimg.cn/blog_migrate/6409d671752c3d9a099196895131ba6e.jpeg)
如果你的不显示,去
navicat ==》 菜单 ==》 显示 ==》钩上显示隐藏的项目
重启navicat就可以了
![252e5ed1021d8e306bb9f3e4adf20f96.png](https://i-blog.csdnimg.cn/blog_migrate/e846aabf5b2b02364c43cc9ff787e093.jpeg)
打开一个集合右下角可以查看
- 网格视图
- 树视图
- JSON视图
增删改查
1.创建操作
- db.collection.insertOne()
- db.collection.insertMany()
![71debf77e04a09c3e0a3be6084a5ed74.png](https://i-blog.csdnimg.cn/blog_migrate/30e0af32cc8e3ca4663d3a0b036c8550.png)
// 插入集合名称为products的集合并插入数据 (不存在集合会新建) db.products.insertOne({ item: "card", qty: 15 }); // 批量插入数据 db.products.insertMany([{ item: "card1", qty: 16 }, { item: "card2", qty: 17 }, { item: "envelope", qty: 20 }, { item: "stamps", qty: 30 }]);
2.查询操作
- db.collection.find()
![421d3caff2823da7ef4e27e1511e48d2.png](https://i-blog.csdnimg.cn/blog_migrate/8c00feb8c005ca3008381133fcbab9e6.png)
db.products.find({ qty: 15 }).limit(1)
3.更新操作
- db.collection.updateOne()
db.collection.updateOne(filter,update,options)
查找与过滤器匹配的第一个文档,并应用指定的更新修改。
![5b8bfd2a59c023c7a645ff59ebdda408.png](https://i-blog.csdnimg.cn/blog_migrate/c285a8b3736749efc3238abb2911dc6d.jpeg)
db.products.find({ item: "stamps" }).limit(1); // 找到item为stamps的并修改其qty为60 db.products.updateOne( { "item": "stamps" }, { $set: { "qty": 60 } } ); db.products.find({ item: "stamps" }).limit(1);
- db.collection.updateMany()
![2dd7bb728eb89431116a6fcef44c8477.png](https://i-blog.csdnimg.cn/blog_migrate/ef5657d6f4ae6bfd419fdfc1e206e13d.png)
// 把qty大于15的统统修改为15 db.products.updateMany( { qty: { $gt: 15 } }, { $set: { "qty": 15 } } );
![639a780326ef2199390673f105bc4d5c.png](https://i-blog.csdnimg.cn/blog_migrate/45de4b1503f877b3959f71cc54f968a8.png)
- db.collection.replaceOne()
使用替换文档替换集合中与过滤器匹配的第一个匹配文档。
// 把集合products中item为stamps 整个替换掉 db.products.replaceOne( { "item" : "stamps" }, { "item" : "stampss", "Borough" : "Manhattan" } );
4.删除操作
- db.collection.deleteOne()
- db.collection.deleteMany()
![4510ab4698aa763c7d7c8b02135e01be.png](https://i-blog.csdnimg.cn/blog_migrate/18fb9eabb769e8c83a92e71d2c47b1fa.png)
// 删除item为stampss的 db.products.deleteOne( { "item" : "stampss" } ); // 批量删除qty小于15的 db.products.deleteMany( { "qty" : {$lt: 15} } );
持续更新连接