MongoDB
1. 安装MongoDB及启动
【下载】在官网下载安装包,并将其解压至/usr/local/目录,并重命名为MongoDB
【配置】终端输入 open -e .zshrc ,在.bash_profile配置文件中添加环境变量 export PATH=${PATH}:/usr/local/mongoDB/bin,关闭配置文件,在终端中输入 source .zshrc 使配置立即生效。
【启动服务】在/usr/local/mongoDB目录创建两个文件夹: data 和 log,并在该路径下终端输入 sudo mongod --dbpath data --logpath log/mongod.log --logappend。
【连接数据库】新的终端中输入 mongo 连接数据库,也可以使用MongoDB Compass可视化工具连接。
2. 数据库基本操作
// 增
db.集合名.insert({"键名1":值1, "键名2": 值2 ...})
// 删
db.集合名.remove({查询条件}) —— 举例 db.students.remove({"name":"envision"})
db.集合名.remove({}) # 删除全部数据
// 改
db.集合名.update({查询条件}, {修改后结果}) # 修改整行
db.集合名.update({查找条件}, {$set:{"要修改的字段名1":修改后的值, "要修改的字段名2": "值2"}}) # 修改指定字段的值
// 查
db.集合名.findOne() # 只返回一行
db.集合名.find() # 返回全部
db.集合名.find({查找条件}) # 按条件查找
db.集合名.find().pretty() # 格式化打印3. 数据库条件匹配
3.1 使用比较运算符查询
db.集合名.find({"键名": {比较运算符1:值1, 比较运算符2:值2} })
$gt
大于
$lt
小于
$gte
大于等于
$lte
小于等于欧
$ne
不等于
3.2 关键字
IN/NOT IN 关键字 - 判断值是否存在
db.集合名.find({"键名": {$in:[值1, 值2, 值3 ...]} })
db.集合名.find({"键名": {$nin:[值1, 值2, 值3 ...]} })
EXISTS 关键字 - 判断值段(键)是否存在
db.集合名.find({"键名": {$exist: true|fase} })
SIZE 关键字 - 判断list长度
db.集合名.find( {"键名": {$size:n} })
OR 关键字 - 多个条件
db.集合名.find({$or:[{条件1}, {条件2}, {条件3}...]})
3.3 模糊查询
db.集合名.find({"键名": js正则表达)
3.4 查询结果处理
结果排序
db.集合名.find().sort({"键名": 1|-1, "键名": 1|-1...}) —— 1 为升序;-1 为降序
返回指定数量结果
db.集合名.find().limit(n)
db.集合名.find().skip(n) # 跳过n条,返回从n+1开始的数据
db.集合名.find().skip(n).limit(m) # 跳过n条,返回后面的m条
返回结果计数
db.集合名.find().count()
db.集合名.find().skip(n).count(true) # 与skip结合使用时,要加true,不加true就会统计全部数据条目
3.5 聚合函数(重要)
基本语法:
常用管道:
$group
将集合中的文档分组,可用于统计结果
$match
过滤数据,只输出符合条件的文档
$project
修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
$sort
将输入文档排序后输出
$limit
限制聚合管道返回的文档数
$skip
跳过指定数量的文档,并返回余下的文档
$unwind
将数组类型的字段进行拆分
常用聚合函数 - 只能在$group管道中使用。
$sum
计算总和,$sum:1同count表示计数
$avg
计算平均值
$min
获取最小值
$max
获取最大值
$push
在结果文档中插入值到一个数组中,相当于拼接字段
$first
根据资源文档的排序获取第一个文档数据
$last
根据资源文档的排序获取最后一个文档数据
实例1-$group:
实例2 -$match
实例3-$unwind
实例4-$project
实例5-$skip
4. Mongoose
4.1 Mongoose使用
安装Mongoose -
npm install mongoose --save连接数据库
创建Schema,并生成Model
在需要使用数据库的地方导入对应的Model
4.2 Mongoose基础
Mongoose 中任何事物都是从 Schema 开始的,它是一种以文件形式存储的数据库模型骨架,但不具备数据库的操作能力,我们需要将其编译成 Model,Model 是一种构造器,具有抽象属性和行为,每一个 Model 的实例就是一个文档。
与普通数据库的术语对应
table
collection
数据库表/集合
row
document
数据记录行/文档
column
index
索引
primary key
primary key
MongoDB自动将_id字段设置为主键
Schema中允许的模式类型
String-字符串
Number-数字
Date-时间格式
Boolean-布尔
Array-数组
ObjectId-对象
Buffer-二进制缓冲区
Mixed-混合值
Map-经纬度格式
Decimal-小数
实例方法与静态方法:Schema中可以自定义实例方法与静态方法,静态方法在在Model层就能使用,实例方法则每个实例都能使用。
基本操作
增 - ModelName.create({name: 'Dot'} , callback)
删 - ModelName.remove({name: 'Dot'}, callback)
改 - ModelName.update({name: 'Dot'}, {修改后结果}, callback)
查 - ModelName.find({name: 'Dot'}, callback)
4.3 Validation
可选字段
required: 表示必填字段
min,max: 用来给Number类型的数据设置限制
enum,match,maxlength,minlength: 这些验证是给string类型的
当然也可以自定义验证的内容
4.4 Population
Mongoose提供的 population用来连接多表数据查询,用到的关键字是: ref 指明外联的数据库的名字。一般,我们需要在schema中就定义好。
schema中定义关联数据库
创建数据库
Population
4.5 Middleware
pre: 在指定方法执行之前绑定。
post: 相当于事件监听的绑定。
使用范围:
doc上:init,validate,save,remove。
model上:count,find,findOne,findOneAndRemove,findOneAndUpdate,update
最后更新于
这有帮助吗?