mongodb基础知识
⼀. 基础概念
  1. 数据:能够输⼊到计算机中并被识别处理的信息集合
  2. 数据结构:研究⼀个数据集合中,数据元素关系
  3. 数据库:按照数据结构,存储管理数据的仓库。数据仓库是在数据库管理系统管理控制下在⼀定介质中创建的
  4. 数据库管理系统:数据库管理软件,⽤于建⽴维护操作数据库
  5. 数据库系统:由数据库和数据库管理系统等构成的数据库开发⼯具集合。
⼆.  关系型数据库  &  ⾮关系型数据库
  1. 关系型数据库:采⽤关系模型(⼆维表)来组织数据结构的数据库
    【1】常见关系型数据库:Oracle  DB2  SQLServer    MySQL  SQLite
    【2】优缺点:
    优点:* 逻辑清晰,容易理解,结构类似常见表格
            * 使⽤SQL语句,技术成熟,使⽤⽅便
            * 关系型数据库⽐较成熟,可以使⽤⼀些复杂的操作
     缺点:* 每次操作都需要专门的sql解析
        * 关系型数据库结构严格,内部加锁
        * 在应对海量数据并发处理时读写速度差
  2. ⾮关系型数据库(NoSql-->not only sql)
    【1】常见的⾮关系型数据库
      * 不是采⽤关系模型构建的数据库
        键值型: Redis
        列存储: HBase
        ⽂档型: MongoDB
        图形: Graph
    【2】优缺点
    优点: * 读写速度快,更好的针对并发处理
        * 使⽤灵活,容易扩展
     缺点: * 没有sql那样统⼀成熟的语句
        * 技术成熟度较差,缺少⼀些复杂操作
   【3】应⽤场景
      1. 对数据格式要求不严格,⽐较灵活
      2. 对数据处理速度,特别是海量数据的并发处理速度要求⽐较⾼
      3. 特定场景:需要灵活扩展,需要作为缓存
三. MongoDB数据库
  1.  mongodb特点
    * ⾮关系型数据库,是属于⽂档型数据库
    * 开源数据库,使⽤⼴泛
    * 由 c++ 编写的数据库管理系统
    * ⽀持丰富的存储类型和数据操作
    * 提供了丰富的编程语⾔接⼝
    * ⽅便扩展和部署
  2. MongoDB 安装
    * Linux :  sudo  apt-get install  mongodb
    * Mac OS:  brew  install  mongodb
      * Windows:  db -->Try free -->server  下载安装
      Linux 安装⽬录
        * 安装位置: /var/lib/mongodb..
        * 配置⽂件: /f
        * 命令集:  /usr/bin
      进⼊mongodb交互界⾯
        名称: mongodb shell
        命令: mongo
        退出: quit()    ctrl-c
        mongod 设置mongodb的基本信息
        mongod  -h  查看帮助
          mongod  --dbpath  [dir]  设置数据库存储位置
          mongod  --port  [port]  设置数据库端⼝
      * mongodb默认端⼝27017
四. MongodDB 数据库数据结构
  1. 数据组织结构:键值对->⽂档->集合->数据库
      e.g.:
    -----------------------------------
    ID    |      NAME      |    AGE
    -----------------------------------
    1    |      Lily      |    17
    -----------------------------------
    2    |      Lucy      |    18
    -----------------------------------
      {
        "_id":1,
        "NAME":'Lily',
      "AGE" :17
        },
      {
      "_id":2,
      "NAME":'Lucy',
        "AGE" :18
      }
  2. 基本概念对⽐
      mysql        mongodb        含义
    database      database      数据库
    table        collection    表/集合
    column        field          字段/域
      row          document      记录/⽂档
      index        index          索引
五. 数据库操作
  1. 创建数据库: use [database]
    e.g.  创建⼀个叫stu的数据库
        use  stu
      * use实际是选择使⽤哪个数据库,当这个数据库不存在则⾃动建⽴
        * use创建数据库并不会⽴即建⽴起来,⽽是当真正插⼊数据时才会建⽴
    2. 查看数据库: show  dbs
 3. 数据库命名规则:
    * 使⽤utf-8字符串
    * 不能含有空格  .  /  \  '\0' 字符
    * 不能超过64字节 
    * 不要和系统库重名
  4. 全局变量 db :代表当前正在使⽤的数据库
    * 不选择任何数据库时  db = test
  5. 数据库的删除: db.dropDatabase()
  6. 数据库的备份和恢复命名
    备份命令:
      mongodump -h [host] -d [db] -o [path]
        e.g. 将本机 stu 数据库备份在当前⽬录下
        mongodump -h 127.0.0.1 -d stu -o  .
  恢复命令:
        mongorestore -h [host:port] -d [db]  [bak]
      e.g. 将stu备份恢复到本机student数据库中
        mongorestore -h 127.0.0.1:27017 -d student stu
  7. 数据库运⾏监控
  查看数据库的运⾏状态: mongostat
    insert query update delete:每秒增查改删次数
  查看数据库集合读写时长: mongotop
    * 得到每个集合在⼀秒内的读写时间
六. 集合操作
  1. 创建集合
    db.createCollection(collectionName)
      e.g. 创建名为class1的集合
        db.createCollection('class1')
    db.colletion.insert(...)
      * 插⼊数据时如果集合不存在则⾃动创建
    2. 查看集合: show collections
        show tables
  3. 集合命名规则
    * 使⽤utf-8 字符
    * 不能含有 '\0'
    * 不要以 system. 开头,这是系统集合默认开头
    * 不要和关键字重名
    4. 删除集合
    db.collection.drop()
      e.g.  删除class集合
        db.class.drop()
    5. 集合重命名
    ameCollection(newName)
      e.g.  将class重命名为class0
        ameCollection('class0')
七. ⽂档操作
1. 什么是⽂档?
  * ⽂档是mongodb数据库中基本的数据组织单元
  * ⽂档由键值对构成,每个键值对表达⼀个数据项
  * mongodb⽂档数据bson类型数据
  ⽂档键值对特点:
    * ⽆序的
mysql帮助文档
    * 通过键取其值
    * 不能重复
    * 键是utf-8字符串,不能有'\0'字符
    * 值为bson⽀持数据类型,即存储的数据
  数据类型:
    整型 int  :    整数
    浮点型 double :⼩数
    布尔 boolean : true  false
    字符串 string : utf-8字符串
    ObjectId : id对象⾃动⽣成的不重复值
  * mongodb插⼊⽂档时,每个⽂档都要有⼀个_id域,可以⾃⼰指定⼀个不重复的值,也可以由系统⾃动⽣成
2. 集合中⽂档设计
  1. ⼀个集合中的⽂档可以有不同的域,域的个数也可以不⼀致。
  2. 集合中的⽂档层次不宜嵌套过多,如果层次过多时应考虑分为多个集合
  3. 在⼀个集合中的⽂档应该尽量表达相同类型的数据内容
⼋. 数据操作
  1. 插⼊⽂档
    db.collection.insertOne(doc)
      功能: 插⼊⼀条⽂档
      参数:要插⼊的⽂档
    e.g. 插⼊⼀条⽂档
      db.class0.insertOne({'name':'Lucy','age':18,'sex':'w'})
    * 操作数据时,键可以不加引号
    * 可以⾃⼰设置_id值,但是不能重复
    db.collection.insertMany([{},{}...])
      功能: 插⼊多条⽂档
      参数: 数组中为多个⽂档
    e.g.  同时插⼊多个⽂档
      db.class1.insertMany([{name:'百合',age:33,sex:'w'},{name:'阿蓉',age:28,sex:'w'},{name:'⼩许',age:46,sex:'m'}])    *  数组:使⽤ [] 表⽰的⼀组数据有序集合
    特点:有序,使⽤序列号取值
    db.collection.insert()
      功能: 插⼊⼀条或多条⽂档
      参数:同 insertOne + insertMany
    db.collection.save()
      功能:插⼊⼀条或多条⽂档
      参数:同 insert
    * 使⽤save 如果_id重复会替换掉原有⽂档
  2. 查操作
      mysql:  select ... from table where ...
     mongo:  db.collection.find(query,field)
    db.collection.find(query,field)
      功能: 查所有符合条件的⽂档
      参数:query 查条件
        field 要查的域
      返回:返回所有查到的⽂档
      * db.collection.find() ==> select * from table
      * query :  是⼀个键值对⽂档{},空则表⽰所有
      以键值对表⽰筛选条件,往往配合查操作符完成
      * field :是⼀个键值对⽂档{}, field:0表⽰不查这个与,field:1表⽰查这个域。
        _id域如果不想查 _id:0
        其他域设置要么全为0 要么全为1
      e.g.  查所有年龄18的⽂档,只查name,age域
        db.class0.find({age:18},{_id:0,name:1,age:1})

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。