一, MongoDB 简介
MongoDB 是一个基于分布式文件存储的数据库. 由 C++ 语言编写. 旨在为 web 应用提供可扩展的高性能数据存储解决方案.
MongoDB 是一个介于关系数据库和非关系数据库之间的产品, 是非关系数据库当中功能最丰富, 最像关系数据库的. 它支持的数据结构非常松散, 是类似 JSON 的 bson 格式, 因此可以存储比较复杂的数据类型. Mongo 最大的特点是它支持的查询语言非常强大, 其语法有点类似于面向对象的查询语言, 几乎可以实现类似关系数据库单表查询的绝大部分功能, 而且还支持对数据建立索引.
二, MongoDB 特点
1, 其主要场景如下:
1)网站实时数据处理. 它非常适合实时的插入, 更新与查询, 并具备网站实时数据存储所需的复制及高度伸缩性.
2)缓存. 由于性能很高, 它适合作为信息基础设施的缓存层. 在系统重启之后, 由它搭建的持久化缓存层可以避免下层的数据源过载.
3)高伸缩性的场景. 非常适合由数十或数百台服务器组成的数据库, 它的路线图中已经包含对 MapReduce 引擎的内置支持.
2, 不适用的场景如下:
1)要求高度事务性的系统.
2)传统的商业智能应用.
3)复杂的跨文档 (表) 级联查询.
三, 基本概念
在 MongoDB 中基本的概念是文档, 集合, 数据库, 下表可以帮助更容易的理解 MongoDB 的概念:
关系型数据库
| MongoDB
|
---|---|
数据库
| 数据库
|
表
| 集合
|
行
| 文档
|
列
| 字段
|
表 Join
| 内嵌文档
|
主键
| 主键, MongoDB 自动将_id 字段设置为主键
|
(一)文档
文档相当于关系型数据库中的行. 它一组键值对, 具有动态的模式, 所以文档不需要设置相同的字段, 并且相同的字段不需要相同的数据类型, 这一点, 跟关系型数据库有很大的不同.
注:
文档中的键 / 值对是有序的.
MongoDB 区分类型和大小写.
MongoDB 的文档不能有重复的键.
键不能含有 \ 0 (空字符).
. 和 $ 有特别的意义, 只有在特定环境下才能使用.
(二)集合
集合相当于关系型数据库中的表. 集合就是一组 MongoDB 文档. 集合存在于数据库中, 集合没有固定的结构, 这意味着可以对集合插入不同格式和类型的数据, 但通常情况下我们插入集合的数据都会有一定的关联性.
注:
集合名不能是空字符串 "".
集合名不能含有 \ 0 字符(空字符), 这个字符表示集合名的结尾.
集合名不能以 "system." 开头, 这是为系统集合保留的前缀.
集合名用户创建的集合名字不能含有保留字符. 有些驱动程序的确支持在集合名里面包含, 这是因为某些系统生成的集合中包含该字符. 除非你要访问这种系统创建的集合, 否则千万不要在名字里出现 $.
(三)数据库
数据库是集合的实际容器. 每一数据库都在文件系统中有自己的一组文件. 一个 MongoDB 服务器通常有多个数据库.
注:
不能是空字符串("").
不得含有' '(空格),.,$,/,\ 和 \ 0 (空宇符).
应全部小写.
最多 64 字节.
四, 数据类型
Object ID: 文档的 id
String: 字符串, 最常用, 必须是 utf-8
Boolean: 布尔值, true 或者 false
Integer: 整数
Double: 浮点数
Arrays: 数组或者列表, 多个值存储到一个键
Object: 用于嵌入文档, 即一个值为一个文档
Null: 存储 null 值
Timestamp: 时间戳
Date: 存储当前日期或时间 unix 时间格式
Object ID:
每个文档都有一个属性, 为_id 保证文档的唯一性;
可以自己去设置_id 插入文档
如果自己没设置, MongoDB 为每个文档提供一个独特的_id, 是一个 12 字节十六进制数
前 4 个字节为当前时间戳
接下来的 3 个字节为机器 ID
接下来 2 个字节为 mongo 的服务进程 ID
最后 3 个是简单的增量值
五, 基本操作
1, 创建数据库:
use <数据库名>
如果数据库不存在, 则创建数据库, 否则切换到指定数据库
2, 查看数据库
show dbs
3, 创建集合
db.createCollection("集合名")
4, 删除集合
(1)show collections 查看当前数据库所有集合
(2)db. 集合名. drop()
5, 插入文档数据
db. 集合名. insert(文档内容)
6, 更新文档
db. 集合名. update(
- <query>,
- <update>,
- {
- upsert: <boolean>,
- multi: <boolean>,
- writeConcern: <document>
- }
- )
参数说明:
query : update 的查询条件, 类似 sql update 查询内 where 后面的.
update : update 的对象和一些更新的操作符 (如 $,$inc...) 等, 也可以理解为 sql update 查询内 set 后面的
upsert : 可选, 这个参数的意思是, 如果不存在 update 的记录, 是否插入 objNew,true 为插入, 默认是 false, 不插入.
multi : 可选, MongoDB 默认是 false, 只更新找到的第一条记录, 如果这个参数为 true, 就把按条件查出来多条记录全部更新.
writeConcern : 可选, 抛出异常的级别.
7, 删除文档
- db.collection.remove(
- <query>,
- <justOne>
- )
参数说明:
query:(可选)删除的文档的条件.
justOne:(可选)如果设为 true 或 1, 则只删除一个文档.
writeConcern:(可选)抛出异常的级别.
8, 查询文档
db.collection.find(query, projection)
参数说明:
query: 可选, 使用查询操作符指定查询条件
projection: 可选, 使用投影操作符指定返回的键. 查询时返回文档中所有键值, 只需省略该参数即可(默认省略).
如果你需要以易读的方式来读取数据, 可以使用 pretty()方法, 语法格式如下:
- >db.col.find().pretty()
来源: http://www.bubuko.com/infodetail-3069757.html