MongoDB相对于RDBMS的优势

  1. 模式少 -MongoDB是一个文档数据库,其中一个集合包含不同的文档。一个文档之间的字段数,内容和文档大小可能会有所不同。
  2. 单个对象的结构清晰。
  3. 没有复杂的联接。
  4. 深入的查询能力。MongoDB支持使用与SQL几乎一样强大的基于文档的查询语言对文档进行动态查询。
  5. sql Tuning(优化)
  6. 易于扩展
  7. 不需要将应用程序对象转换/映射到数据库对象。
  8. 使用内部存储器存储(窗口式)工作集,从而可以更快地访问数据


RDBMS:关系数据库管理系统

为什么要使用MongoDB

  1. 面向文档的存储,BSON格式存储,即Binary JSON
  2. 单键索引、复合索引、多键索引、地理空间索引、全文本索引和哈希索引
  3. MongoDB实现高可用 主从复制 
  4. 自动分片 auto sharding 
  5. 丰富的查询 
  6. 快速原地更新(fast in-place updates):大部分更新操作无需申请新空间
  7. MongoDB的专业支持map/reduce支持
  8. Gridfs:各种size大小的集群文件支持

在哪里使用MongoDB

  1. 大数据
  2. 内容管理和交付
  3. 移动和社交基础设施
  4. 用户数据管理
  5. 数据中心

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连接

image.png

填入上述 docker-compose.yml  对应的参数

测试连接,测试成功

image.png

如果你的不显示,去

navicat ==》 菜单 ==》  显示 ==》钩上显示隐藏的项目

重启navicat就可以了


image.png


打开一个集合右下角可以查看

  • 网格视图
  • 树视图
  • JSON视图


增删改查

1.创建操作


  • db.collection.insertOne()
  • db.collection.insertMany()

image.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()


image.png


db.products.find({ qty: 15 }).limit(1)


3.更新操作


  • db.collection.updateOne()

db.collection.updateOne(filter,update,options)

查找与过滤器匹配的第一个文档,并应用指定的更新修改。

image.png

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()

image.png

// 把qty大于15的统统修改为15 db.products.updateMany(  {  qty: {  $gt: 15  }  },  {  $set: {  "qty": 15  }  } );

image.png


  • db.collection.replaceOne()

使用替换文档替换集合中与过滤器匹配的第一个匹配文档。

// 把集合products中item为stamps 整个替换掉  db.products.replaceOne(  { "item" : "stamps" },  { "item" : "stampss", "Borough" : "Manhattan" }  );

4.删除操作

image.png

 // 删除item为stampss的  db.products.deleteOne( { "item" : "stampss" } );  // 批量删除qty小于15的  db.products.deleteMany( { "qty" : {$lt: 15} } );


持续更新连接