MongoDB自学

310 阅读4分钟

Mongodb数据库

  1. 什么是数据库
    • 数据存储的仓库
  2. 数据库分类和它的代表
    • 1.关系型数据库【SQL】
      • 代表:mysql
    • 2.非关系型数据库【NOSQL】
      • 代表:Mongodb
  3. 如何区分一个数据库属于哪一个类别?
    • 有没有表,有就是关系型数据库,没有就是非关系型数据库
  4. 数据库构成
    • 关系型数据库
      • 数据库 -> 表 -> 行
    • 非关系型数据库
      • 数据库 -> 集合 -> 文档
  5. 区别:
    • 非关系型数据库优势:
        1. 性能
        • NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高
        1. 可扩展性
        • 同样是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展
    • 关系型数据库的优势
        1. 复杂查询
        • 可以用SQL语句方便的在多个表之间做非常复杂的数据查询
        1. 事务支持
        • 使得对于安全性能很高的数据访问要求得以实现

MongoDB简介

  1. MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,意图为在WEB应用提供可扩展的高性能数据存储解决方案
    • 分布式算法指的是将一个大型任务进行分解,将每个小任务的执行结果组合起来,返回一个整体
    • 好处:给其他任务提供了可执行的机会
    • 代表:git
  2. 存储类型(BSON)
    • 什么是BSON? -bson是json的超集,bson拥有json的所有,但是它有json没有的 二进制类型
      • bson是一种类似json的二进制形式的存储格式,简称Binary JSON,他和JSON一样支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型
      • 特点:轻量性,可遍历性,高效性
  3. MongoDB的优点
    • 高性能,易部署,易使用,存储数据方便
    • 面向集合存储,易存储对象类型的数据
    • 模式自由
    • 支持动态查询
    • 支持完全索引,包含内部对象
    • 支持查询
    • 支持复制和故障恢复(例如:git的版本管理工具)
    • 使用高效的二进制数据存储,包括大型对象(如视频等)
    • 自动处理碎片,以支持云计算层次的扩展性
    • 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言
    • 文件存储格式位BSON

MongoDB的操作

> help   查看帮助
> show dbs 显示数据库列表
> use dbname 创建数据库
    - 如果存在指定名称的数据库,则为切换至该数据库,如果不存在该名称的数据库,则为创建该名称的数据库
    - 注意:如果数据库内无任何数据,会被MnongoDB系统默认为空文件,不会显示在数据库列表中
> show collectons 显示数据库中的集合

> 增
    - db.web.save({"name":"老李"}) 创建了名为web的集合(在名为web的集合中),新增了一条{"name":"老李"}的数据
    - db.web.insert({"name":"老张"}) 创建了名为web的集合(在名为web的集合中),新增了一条{"name":"老张"}的数据
    - 注意:save()和insert()也存在着区别,save()参数带id的话就是修改,但是insert()参数带id就会报错
    
> 删
    - db.集合名.remove({}) 删除该集合下的所有数据
    - db.集合名.remove({name:"张三"}) 删除该集合下的name="张三"的数据
    - db.集合名.drop()或db.runCommand({"drop":"库名"}) 删除该名的集合
    - db.runCommand({"dropDatabase":1}) 删除当前数据库,注意此时1没有双引号
    
> 改
    - db.集合名.update({"name":"赵虎"},{$set:{sex:"men"}},true,true) 
    - 第一个参数:查找条件
    - 第二个参数:修改内容,主键不能修改
    - 第三个参数:true表示匹配所有符合条件的数据,fales表示匹配第一个符合条件的数据
    - 第四个参数:true表示修改所有匹配到的数据,false表示修改第一条匹配到的数据
    
> 查
    - db.集合名.find() 查找该库名中所有的数据
    - db.集合名.findOne() 查找该集合中的第一条数据
    - db.集合名.find().pretty() 格式化查询到的数据
    - $gt  -->  >
    - $lt  -->  <
    - $gte -->  >=
    - $lte -->  <=
    - $ne  -->  <>不等于
    - $mod -->  key%参1余数为参2的
    - $in  -->  条件符合参数中的任意一个的
    - $nin -->  条件不属于参数中的任意一个
    - $size -->  查询字段的内容长度等于参数的数值的
    - $exists -->  true|false true表示包含该字段,false表示不包含的
    - $or  -->  表示符合任意一个条件的数据
    - db.web.find({age:{$gt:18}}) 查找年龄大于18的数据
    - db.集合名.find().sort({age:-1}) 年龄降序排列
    - db.集合名.find().sort({age:1}) 年龄升序排列
    - db.集合名.find().limit(2) 截取集合中的前两条数据