推荐学习书籍:MongoDB权威指南
一、简介
MongoDB:面向文档的数据库。(不是关系型数据库)
其采用的面向文档的数据模型使其可以自动在多台服务器之间分割数据。
二、入门
1、什么是文档?
文档时MongoDB中数据的基本单元。(类似于关系型数据库中的行,但比行复杂)。
自己理解:多个键值对的有序放在一起
注意:
- 文档中的键是字符串(少数例外情况可以使用任意的utf-8字符)
- MongoDB不仅区分类型,也区分大小写。如:数字3 和 字符串“3”不同。
- 每个文档有唯一的_id来标示
2、集合
集合就是一组文档。是无模式的,即一个集合里的文档可以是各式各样的。
3、数据库
多个文档组成集合,同样多个集合组成数据库。
4、MongoDB shell
MongoDB自带一个javascript shell,可以从命令行与MongoDB实例交互。
4.1、shell中的基本操作(CRUD)
- 创建 insert
- 读取 find() 或 findOne()
- 更新 update()
- 删除 remove
4.2 学会使用帮助 help
5、数据类型
null、布尔、32位整数、64为整数、64位浮点数、字符串、符号 ??、对象id、日期、正则表达式、代码、二进制数据、最大值、最小值、未定义、数组、内嵌文档(常用)
三、创建、更新及删除文档
1、插入
若插入多个文档,批量插入会更快一些。
2、删除
删除数据时永久性的,不能撤销也不能恢复。
3、更新文档
- 文档替换 delete update
- 使用修改器
- $set用来指定一个键的值,若该键不存在则创建它。
- $inc用来增加和已有键的值,若该键不存在则创建一个键。
- 数组修改器$push $ne (条件判断) $addToSet(可以避免重复) $addToSet和$each 组和起来,可以添加多个不同的值。 $pop $pull
- 数组定位修改器 "." "$"(定位符只更新第一个匹配到的元素)
- upsert是一种特殊的更新。要是没有匹配的文档,就会以这个条件和更新文档为基础创建一个新的文档。 update的第三个参数设为true。
- 默认的情况下,更新只能对符合条件的第一个文档进行更新操作。要是想要更新多个文档,update的第四个参数设为true
- 返回已更新的文档 findAndModify()和getLastError查看更新的文档数
三、查询
查询就是返回一个集合中文档的子集。
1、find()函数介绍
查询文档:
当查询文档为空({}),就是返回整个集合。可以向查询文档中加入多个键值对。(对个条件会用and组合在一起)
find({"user_name" : "Joe", "age" : 19, "sex" : "man", ...})
制定返回的键:
有时不需要将文档中所有的键-值对都返回。此时可以用find的第二个参数来制定想要显示的键。(1:显示 0:不显示)
find({}, {"user_name" : 1, "email" : 1, "_id" : 0})
2、查询条件
- 比较运算符 $lt、$lte、$gt、$gte分别对应<、<=、>和>=。如:{"age" : {"$gte" : 18,"lte" : 30}} (18<=age<=30)
- OR查询
- $in 单一键与多个值匹配 {"age" : {"$in" : [12, 13, 17, 30]}}
- $or 多个条件组合和and条件有点区别 {"$or" : [ {"age" : {"$in" : [13, 24, 98]}, {"winner" : true } ]}
- $not 元条件句,可以用在任何条件之上
- 特定于类型的查询
- $null (1.值为null 2.匹配不存在)
- 正则表达式
- 数组查询
- $all {"fruit" : {"$all" : ["apple", "banana"]}}
- $size {"fruit" : {"$size" : 3}}
- $slice {"comments" : {"$slice" : 10}} #前10条评论
- 查询内部文档
- $eleMatch 将限定条件进行分组,仅当需要对一个内嵌文档的多个键操作时才会用到。
- $where 查询
- 游标 数据库用游标来返回find执行的结果。
- limit、skip和sort