专栏首页Spring专栏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

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

测试连接,测试成功

如果你的不显示,去

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

重启navicat就可以了

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

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

增删改查

1.创建操作

  • db.collection.insertOne()
  • db.collection.insertMany()
// 插入集合名称为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()
db.products.find({ qty: 15 }).limit(1)

3.更新操作

  • db.collection.updateOne()

db.collection.updateOne(filter,update,options) 查找与过滤器匹配的第一个文档,并应用指定的更新修改。

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()
// 把qty大于15的统统修改为15
db.products.updateMany(
    {
        qty: {
            $gt: 15
        }
    },
    {
        $set: {
            "qty": 15
        }
    }
);
  • db.collection.replaceOne()

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

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

4.删除操作

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

持续更新连接

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • IDEA提高开发效率的7个插件

    一般我们为了新建多表连接后映射的 ResultMap ,耗费不少时间,那么我们就来试一试这个多行编辑

    拾荒者的笔记
  • 还在用SimpleDateFormat格式化时间?小心经理锤你

    本来开开心心的周末时光,线上突然就疯狂报错,以为程序炸了,截停日志,发现是就是类似下述一段错误

    拾荒者的笔记
  • Spring Boot2: 快速入门指南

    对于之前的Spring框架的使用,各种配置文件XML、properties一旦出错之后错误难寻

    拾荒者的笔记
  • MongoDB使用小结:一些常用操作分享

    本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell、pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程。

    拓荒者
  • docker:如果提示gpg: 找不到有效的 OpenPGP 数据。先添加pgp key

    sudo curl -fsSL https://get.docker.com/| sh

    Python疯子
  • Docker开启Remote API 访问 2375端口

    在/usr/lib/systemd/system/docker.service,配置远程访问。

    sunsky
  • Windows下的Docker Machine - 如何设置你的Docker主机

    最近我一直在折腾Docker。原因有很多,可以肯定的是,我喜欢折腾最新的技术,而且最好能帮忙实现一到两个示例的demo出来。和我的其他同事们不一样的是,我在Wi...

    李郑
  • Windows上的Docker Machine - 如何安装配置主机

    最近我一直在研究Docker,原因有很多,但主要还是我比较喜欢研究前沿的技术,甚至还可以帮忙构建一个Demo(演示)或者一两个实验室。和其他人的做法有一点不...

    萌萌哒小睿睿
  • Docker实践(四):Docker Machine

     Docker Machine是Docker官方三剑客项目之一,负责使用docker容器的第一步:在多种平台上快速安装和维护docker运行环境。它支持多种平台...

    loong576
  • 【编译】VMware收购人工智能创业公司Apteligent

    数据猿导读 VMware透露,作为上个月对Wavefront收购之后的补充收购计划,收购Apteligent将帮助其加强对跨云环境和应用程序的度量监控。 ? 编...

    数据猿

扫码关注云+社区

领取腾讯云代金券