MongoDB是一个跨平台,面向文档的数据库,提供高性能,高可用性和易于扩展,总结知识点分享给与我一样刚入门MongoDB的人。
基本概念
- 数据库:数据库是一个集合的物理容器。每个数据库获取其自己设定在文件系统上的文件。一个单一的MongoDB服务器通常有多个数据库
- 集合:集合是一组MongoDB的文件。它与一个RDBMS表是等效的。一个集合存在于数据库中。集合不强制执行模式。集合中的文档可以有不同的字段。
文档:文档是一组键值对。文档具有动态模式。动态模式是指,在同一个集合的文件不必具有相同一组集合的文档字段或结构,并且相同的字段可以保持不同类型的数据。
文档是MongoDB中数据的基本单元
- 在MongoDB中,一个MongoDB实例可以承载多个数据库,每个数据库拥有0或多个集合,一个集合拥有多个文档
- 在同一个MongoDB服务器上存放多个应用那个程序或用户的数据,需要使用不同的数据库
- 使用BSON格式
使用MongoDB在哪些场景
- 大而复杂的数据
- 移动和社会基础设施数据
- 内容管理和交付
- 用户数据管理
- 数据中心
初始化的数据库
- admin:root数据库,有数据库所以权限
- local:存储所以本地集合
- config:存储分片信息
基本数据类型
- null:空或不存在
- 布尔型:true或false
- 数值:默认64位浮点型数值
- 字符串:UTF-8
- 日期:自新世纪以来经过的毫秒,不存储时区
- 正则表达式:与js语法相同
- 数组:数据列表或数据集
- 内嵌文档:对象嵌套
- 对象
- 对象id是一个12字节的ID,是一个由24个十六进制数字组成的字符串,作为文档唯一标识,一秒钟最多允许每个进程拥有2563个不同的ObjectId
- ObjectId前四个字节是从标准纪元开始的时间戳,单位为秒
- 接下来3个字节是所在主机的唯一标识符,机器主机名的散列值
- 接下来2个字节来自产生ObjectId的进程的进程标识符PID
- 最后3个字节是一个自动增加的计数器
- 二进制数据
- 代码
MongoDB shell
启动时会连到test数据库,并将数据库连接赋值给全局变量db
连接到不同的数据库或服务器
|
|
帮助
help
db.foo.update
,方法不加括号可查看相应函数的源码
创建
.mongorc.js
- 频繁加载的脚本
- 移除比较危险的shell辅助函数
- 指定
--norc
,可以禁止加载.mongorc.js
定制shell提示:将prompt变量设为一个字符串或函数
编辑符合变量:设置EDITOR
四个基本操作:创建、读取、更新、删除(CRUD)
创建
- 单个插入:
insert
- 批量插入:
batchInsert
删除
- 删除文档:
remove
,可接受一个查询文档作为参数 - 删除集合:
drop
,不能指定条件
更新
update
:必须接受两个参数,第一个匹配待更新文档,第二个是修改器文档。接受第三个参数,若为true,则表示这是upsert。接受第四个参数,若为true,则表示更新所有匹配的文档。- 原子性的更新修改器
$set
:指定一个字段的值$unset
:删除指定键$inc
:增加已有键的值,不存在则创建,只能用于整型、长整型或双精度浮点型的值$push
:向已有数组末尾加入一个元素$each
:通过一次$push
操作添加多个值$slice
:设置最大长度,必须为负整数,相当于建立队列,保留最后的元素$sort
:清理元素
$addToSet
:添加新数据,可以避免重复$pop
:可以从数组任何一端删除元素
$pull
:删除所有匹配的文档upsert
:若未找到符合更新条件的文档,则以此为条件创建新文档;若找到相应文档,正常更新。可用于创建又可用于更新。
读取
find和findOne
- 第一个参数用于指定查询条件
第二个参数指定想要返回的键
查询条件
$lt,$lte,$gt,$gte,$ne
对应小于、小于等于、大于、大于等于、不等于$in
:用来查询一个键的多个值$or
:在多个键中查询任意给定值1db.raffle.find({"$or":[{"tricket_no":{"in":[755,542,390]}},{"winner":true}]})$not
:用来查询与特定模式不匹配的文档$exists
:判定键值是否存在$maxscan
:指定本次查询文档数量的上限$min
:强制指定下边界$max
:强制指定上边界
$showDiskLoc
:用于显示结果在磁盘的位置数组查询
$all
:通过多个元素匹配数组$size
:查询特定长度的数组$slice
:返回某个键匹配的数组元素的一个子集$elemMatch
:指定一组添加,只可用于数组
查询函数
limit
:限制返回数量skip
:忽略一定数量的结果sort
:接受一个对象作为参数,键为文档键名,值为排序方向(1为升序,-1为降序)