一、MongoDB 简介

MongoDB是一款强大、灵活、且易于扩展的通用型数据库。它能扩展出非常多的功能,如二级索引、范围查询、排序、聚合以及地理空间索引。

1.1 易于使用

  • 面向文档的存储方法,一条记录表现复杂的层次关系,与面向对象对数据的看法一致。
  • 文档的键值是动态类型。即没有预定义的模式。

1.2 易于扩展

  • 面向文档的数据模型使它能够很容易地在多台服务器之间进行数据分割。
  • 自动处理跨集群的数据和负载
  • 自动重新分配文档
  • 将用户请求路由到正确的机器上
  • 向集群中添加新服务器,MongoDB会自动将现有数据向新服务器传送

1.3 丰富的功能

  • 索引
    • 二级索引
    • 唯一索引
    • 复合索引
    • 地理空间索引
    • 全文索引
  • 聚合(支持聚合管道)
  • 特殊的集合类型(支持存在时间有限、固定大小的集合)
  • 文件存储(file storage支持一种非常易用的协议,用于存储大文件和文件元数据)

不支持的功能:

  • join
  • 多行事物

卓越的性能

  • mongodb传输协议
  • 用空间换性能(预分配数据文件)

只要有可能,数据库服务器就会将处理和逻辑交给客户端,这是mongodb能够实现如此高性能的原因之一。

小结

建立一种灵活、高效、易于扩展的、功能完备的数据库

二、MongoDB基础知识

2.1 文档

相当于mysql中的行、但是比行复杂,文档用json格式存储

  • 键值对是有序的(子节点中两个文档是不同的)

    • {a:1,b2}
    • {b:2,a:1}
  • 文档不能有重复的键

    • {a:1,a:1} <= 错误

文档的类型

  • 区分类型和大小写
  • 字符串
    • 不能含有\0
    • .和$是保留字
    • 保留_开头的键

2.2 集合

类似mysql中的表,包含一组文档,动态模式,集合中的文档类型可以使各种各样的,没有任何规律

分集合的优势:

  • 便于管理
  • 同类型的文档索引高效
  • 一个集合中查询数据很慢
  • 只查询一种类型,磁盘寻道更少

命名规则:
不能为空、不能\0、不能保留字

子集合

  • 便于组织数据
  • blog.post
  • blog.author

2.3 数据库

独立权限控制,多个集合组成,最终会变成系统中的文件

命名:

  • 小写
  • 不为空
  • 只能使用ASCII中的字母和数字
  • 最多64字节

保留数据库

  • admin
    • 相当于root数据库
  • local
    • 不会被复制
    • 存储本地单台的集合
  • config
    • 保存分片信息

2.4 启动服务器

  • ./mongod
  • 默认数据目录 /data/db
  • 默认端口 27017
  • 可以通过http://localhost:28017/ 获取数据库管理信息

2.5 mongodb shell

./mongo -h [hostaddress] -p [port]

javascript shell:

  • 可以运行任何Javascript程序
  • 可以利用Javascript的标准库
  • 也可以定义和调用Javascript函数

启动时,shell会连接到MongoDB服务器的test数据库,并将数据库连接复制到全局变量db

语法糖:

  • use database_name;
  • db 返回查看当前指向的数据库

基本操作

  1. 创建
    db.blog.insert({"title":"hello", "content":"world"});
  2. 查询
    db.blog.find();
    db.blog.findOne();
  3. 更新
    db.blog.update({})

    删除

    db.blog.remove();
    无参数表示删除所有元素

    shell使用窍门

help db.help

数据类型

  1. null
    • 空值或者不存在
  2. 布尔
  3. 32位整数
  4. 64位整数
  5. 64位浮点数
    • shell中32、64位整数都会转换为64位浮点数
  6. 字符串
  7. 对象id
  8. 日期
  9. 正则表达式
  10. 代码
    • Javascript代码
  11. 二进制数据
    • bson=>最大值
    • bson=>最小值
  12. 未定义
    • undefined
    • 与null不同
  13. 数组
  14. 内嵌文档