官方文档链接
一、简介
- MongoDB是为快速开发互联网Web应用而设计的数据库系统
- 其设计目标是极简、灵活、成为Web应用栈的一部分
- 其数据模型是面向文档的,所谓文档即是一种类型于JSON的数据结构,可以把MongoDB数据库理解为存储各种各样的JSON文件。(专用结构:BSON,Binary JSON)
- MongoDB的版本规则(x.y.z):y偶数表示稳定版,奇数表示开发版
- MongoDB已不再支持32位系统(i386),且对平台兼容性要求复杂,官方解释
二、核心概念
- 数据库database
- 集合collection
- 文档document
- MongoDB的最小单位,存储和操作的对象都是文档
- 概念对比- BSON数据类型参考:
三、基本操作
- 基本指令
- show dbs:显示当前所有数据库
- use dbname:进入到指定数据库中操作(不存在则自动创建,惰性加载的存储机制)
- db:显示当前所在的数据库
- show collections:显示数据库中所有的集合
- CRUD指令
- 插入文档
- 单个插入语法:db.[collection].insert({})
- 批量插入语法:db.[collection].insertMany([{}, …])
- 查询文档
- 查询全部:db.[collection].find()
- 查询第一条:db.[collection].findOne()
- 投影查询:db.[collection].find({query}, {field})
- 修改文档
- 语法:db.[collection].update({query}, {update}, {options})
- 覆盖修改:db.[collection].update({query}, {})
- 局部修改:db.[collection].update({query}, {$set:{}}),默认只修改第一条数据
- 批量修改:db.[collection].update({query}, {$set:{}}, {multi:true})
- 列值自增:db.[collection].update({query}, {$inc:{field:NumberInt(步进值)}})
- 删除文档
- 语法:db.[collection].remove({query})
- 删除全部:db.[collection].remove({})
- 文档间的关系通过内嵌文档的形式体现
- 一对一 one to one
- 一对多 one to many / 多对一 many to one
- 多对多 many to many
四、高级操作
- 分页查询
- 统计查询,count()
- 语法:db.[collection].count(query, options)
- 分页列表查询,limit()和skip()
- 语法:db.[collection].find().limit(num).skip(num)
- 排序查询,sort()
- 语法:db.[collection].find().sort({升序1,降序-1})
- 模糊查询,正则的复杂条件查询
语法:db.[collection].find({field:/正则表达式/}) - 比较查询
大于:db.[collection].find({field: {$gt: value}})
小于:db.[collection].find({field: {$lt: value}})
大于等于:db.[collection].find({field: {$gte: value}})
小于等于:db.[collection].find({field: {$lte: value}})
不等于:db.[collection].find({field: {$ne: value}}) - 包含查询
包含:db.[collection].find({field: {$in: [value,…]}})
不包含:db.[collection].find({field: {$nin: [value,…]}}) - 条件连接查询
逻辑与:db.[collection].find({$and: [{…}, {…}, …]})
逻辑或:db.[collection].find({$or: [{…}, {…}, …]})
五、索引
索引支持着MongoDB的高效查询。如果没有索引,MongoDB必须进行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档,这种方式的查询效率是极其低下的。如果查询存在适当的索引,MongoDB可以使用它限制必须检查的文档数。官方解释
索引是一种特殊的数据结构,以易于遍历的形式存储集合数据集的一小部分。索引存储特定的字段或一组字段的值,按字段值排序。索引项的排序支持有效的相等匹配和基于范围的查询操作。另外,MongoDB还可以使用索引中的排序返回排序结果。
- 单字段索引 Single Field Index
在文档的单个字段上创建用户定义的升序/降序索引。 - 复合索引 Compound Index
多个字段的用户定义索引,即复合索引。复合索引中列出的字段顺序具有重要意义。