• MongoDB快速入门指南与docker-compose快体验


    MongoDB快速入门指南与docker-compose快体验

    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
    

    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} } );
    

    持续更新连接

  • 相关阅读:
    BFC是什么?如何形成BFC,有什么作用?
    z-index 有什么作用? 如何使用?
    有几种定位方式?分别是如何实现定位的?参考点是什么?使用场景是什么?
    Promise
    token
    文档碎片
    ECharts常用配置项
    for each()和map()的区别
    window.onload和$(docunment).ready的区别
    密码的两种常用加密方式
  • 原文地址:https://www.cnblogs.com/cvandy/p/12891209.html
Copyright © 2020-2023  润新知