1.Mongodb 介绍及部署

  • MongoDB 是一个开源的文档导向数据库,采用NoSQL(非关系型数据库)的设计理念。

  • MongoDB是一个基于分布式文件存储的数据库。

    • 分布式文件存储是一种将文件数据分布式的存储在多台计算机上。
  • MongoDB是一款强大的文档导向数据库,适合处理大量动态数据和需要灵活数据模型的应用场景

    • 文档导向数据库:它以文档的形式存储数据,每个文档都是一个键值对的集合,类似于JSON对象,可以包含各种类型的数据。
  • MongoDB的优点:

    • 文档向导:MongoDB存储数据的基本单位是文档(类似于JSON{java scripts}对象),文档可以包含嵌套的数据结构,这是得数据模型更加灵活
    • 可扩展性:MongoDB支持水平扩展,可以通过添加更多的机器来增加存储容量和提高性能
    • 高性能:MongoDB使用内存映射文件的方式来提供高性能的数据访问,并且支持复制和分片
    • 丰富的查询语言:MongoDB提供了丰富的查询语言和索引支持,可以进行复杂的数据查询和聚合操作
  • 数据存储的逻辑结构:

    • MySQL 逻辑结构:
      • 库-表-数据行
    • Mongodb 逻辑结构:
      • 库-集合-文档
  • Mongodb的部署:

    • 1.创建一个用户,专门用来管理Mongodb

      • useradd mongod
      • passwd mongod
    • 2.创建mongodb所需要的目录:

      • mkdir -p /mongodb/conf
      • mkdir -p /mongodb/log
      • mkdir -p /mongodb/data
    • 3.拖包安装:

      • 解压数据包:tar xf mongodb-linux-x86_64-rhel70-4.4.4.tgz
      • 拷贝目录下的bin目录到 /下的mongodb
        • cp -a mongodb-linux-x86_64-rhel70-4.4.4/bin/ /mongodb
    • 4.设置目录结构权限:
      • chown -R mongod:mongod /mongodb
    • 5.设置用户环境变量:

      • su - mongod
      • vi .bash_profile

        • 添加:export PATH=/mongodb/bin:$PATH
        • 保存退出
      • source .bash_profile
    • 6.创建配置文件并写入内容(YAML格式):

      • cat > /mongodb/conf/mongo.conf <<EOF
      • systemLog:
      • destination: file
      • path: "/mongodb/log/mongodb.log"
      • logAppend: true
      • storage:
      • journal:
      • enabled: true
      • dbPath: "/mongodb/data/"
      • processManagement:
      • fork: true
      • net:
      • port: 27017
      • bindIp: 192.168.8.5,127.0.0.1
      • EOF
    • 7.启动/关闭mongodb(端口:27017):

      • 启动:mongod -f /mongodb/conf/mongo.conf
      • 关闭:mongod -f /mongodb/conf/mongo.conf --shutdown
    • 8.登录mongodb:
      • mongo
    • 至此 mongodb数据库部署完毕,以下是常用的基本操作
  • mongodb常用基本操作:

    • mongodb 默认存在的库

      • > show databases;
      • admin 0.000GB
      • config 0.000GB
      • local 0.000GB
    • 查看当前db版本:db.version()
    • 查看当前在那个库中:db\db.getName()
    • 查看所有库:show dbs
    • 切换数据库:use [库名]
    • 查看所有的collection(集合\表):show tables
    • 显示当前数据库状态:db.stats()
    • 查看当前连接数据库的主机ip:db.getMongo()
  • Mongodb对象的操作:

    • mongo mysql
    • 库 -----> 库
    • 集合 -----> 表
    • 文档 -----> 数据行
  • 1.库的操作:

    • 创建库时注意:

      • 当use的时候,系统就会自动创建一个数据库。
      • 如果use之后没有创建任何集合。
      • 系统就会删除这个数据库。
    • 删除数据库;

      • 如果没有选择任何数据库,会删除默认的test数据库
      • //删除test数据库
    • 创建一个A库:use A
    • 删除A库:

      • use A
      • db.dropDatabase()
      • 先使用use切换到要删除的库下,再使用db.dropDatabase()命令删除
    • 2.集合的操作:

      • 创建集合语法格式:

        • db.createCollection(name,options)
        • 参数说明:

          • name: 要创建的集合名称
          • options: 可选参数, 指定有关内存大小及索引的选项
          • capped 值为true,则创建固定集合
          • autoIndexId 值为true,自动在 _id 字段创建索引。
          • size 为固定集合指定一个最大值(以字节计)
          • max 指定固定集合中包含文档的最大数量
      • 实例1:

        • use app
        • 创建a表:db.createCollection('a')
        • 创建b表:db.createCollection('b')
        • 查看当前数据库下所有集合:show collections\db.getCollectionNames()
      • 实例2:

        • 当插入一个文档的时候一个集合就会自动创建
        • db.集合.insert({键:'值',键:'值'})
      • 查询数据:

        • 查看集合中所有内容:
          • db.haha.find().pretty()
        • 查看集合满足条件的文档:
          • db.haha.find({id:'102'}).pretty()、
      • 删除集合:
        • db.集合名.drop()
      • 重命名集合:
        • db.old.renameCollection("new")
      • 批量插入数据:
        • for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"docker","age":6,"date":new Date()})}
    • 3.mongodb数据查询语句:

      • 查询集合中所有数据:db.集合.find()
        • 默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。
      • 查看第一条记录:db.log.findOne()
      • 查询总的记录数:db.log.count()
      • 删除集合中的记录数:

        • 删除满足条件的文档:db.log.deleteOne({'uid':0})
        • 删除集合中所有记录:db.log.remove({})
        • 查看去掉重复的数据:db.log.distinct('name')
    • 4.查询集合存储信息

      • 查看集合状态:db.集合名.stats()
      • 查询集合中数据的原始大小:db.log.dataSize()
      • 查询集合中索引数据的原始大小:db.log.totalIndexSize()
      • **查询集合中索引+数据压缩存储之后的大小:db.log.totalSize()
      • 查询集合中数据压缩存储的大小:db.log.storageSize()
    • 5.变量插入数据:

      • 插入数据:

        • db.col.insert({title: 'MongoDB',
        • description: 'Nosql数据库',
        • by: '教程',
        • tags: ['mongodb', 'database', 'NoSQL'],
        • likes: 100
        • })
      • 将以上插入数据的操作定义为变量:

        • document=({title: 'MongoDB',
        • description: 'Nosql数据库',
        • by: '教程',
        • tags: ['mongodb', 'database', 'NoSQL'],
        • likes: 100
        • });
      • 使用变量插入数据:
        • db.col.insert(document)
    • 6.单行插入数据\多行插入数据:

      • 单行:db.collection.insertOne({'a':1})
      • 多行:

        • 注:先将插入操作定义为一个变量,然后执行这个变量
        • var res1=db.collection.insertMany([{"b": 3}, {'c': 4}])
        • res1
    • 7.MongoDB更新文档

      • 先插入数据用于验证:

        • db.col.insert({
        • title: 'MongoDB',
        • description: 'Nosql数据库',
        • by: '教程',
        • tags: ['mongodb', 'database', 'NoSQL'],
        • likes: 100
        • })
      • 使用update()方法来更新标题(title):
        • db.col.update({'title':'MongoDB'},{$set:{'title':'123'}})
      • 查看更新结果:

        • > db.col.find().pretty()
        • 发现只修改了第一行文档,想要修改行需要设置multi参数为true
          • db.col.update({'title':'MongoDB'},{$set:{'title':'123'}},{multi:true})
      • 删除匹配条件的一条文档:
        • db.collection.deleteOne({"c":4})
      • 删除匹配条件的所有文档:
        • db.collection.deleteMany({"b":3})
相关推荐
敖云岚1 小时前
【Redis】分布式锁的介绍与演进之路
数据库·redis·分布式
LUCIAZZZ1 小时前
HikariCP数据库连接池原理解析
java·jvm·数据库·spring·springboot·线程池·连接池
我在北京coding2 小时前
300道GaussDB(WMS)题目及答案。
数据库·gaussdb
小Tomkk2 小时前
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
数据库·mysql·阿里云
明月醉窗台3 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
沉到海底去吧Go3 小时前
【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
数据库·qt·ocr·图片识别自动改名·图片区域识别改名·pdf识别改名
老纪的技术唠嗑局4 小时前
重剑无锋,大巧不工 —— OceanBase 中的 Nest Loop Join 使用技巧分享
数据库·sql
未来之窗软件服务4 小时前
JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟·东方仙盟数据库
一只爱撸猫的程序猿5 小时前
构建一个简单的智能文档问答系统实例
数据库·spring boot·aigc
nanzhuhe6 小时前
sql中group by使用场景
数据库·sql·数据挖掘