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可视化工具连接。

默认的数据保存地址为 /data/db,需要手动创建,我们自定义了 data 目录位置,需要在启动服务时指定 dbpath 的位置:--dbpath [data文件夹的地址] --logpath [log存放的地址]

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} })

MongoDB
运算

$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使用

  1. 安装Mongoose - npm install mongoose --save

  2. 连接数据库

  1. 创建Schema,并生成Model

  1. 在需要使用数据库的地方导入对应的Model

4.2 Mongoose基础

Mongoose 中任何事物都是从 Schema 开始的,它是一种以文件形式存储的数据库模型骨架,但不具备数据库的操作能力,我们需要将其编译成 Model,Model 是一种构造器,具有抽象属性和行为,每一个 Model 的实例就是一个文档。

与普通数据库的术语对应

SQL术语/概念
MongoDB术语/概念
解释/说明

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

当 save 数据的时候可以在 Schema 定义的部分设置一些验证,参考链接:Mongoose中文文档-指南之验证

可选字段

  • required: 表示必填字段

  • min,max: 用来给Number类型的数据设置限制

  • enum,match,maxlength,minlength: 这些验证是给string类型的

当然也可以自定义验证的内容

4.4 Population

Mongoose提供的 population用来连接多表数据查询,用到的关键字是: ref 指明外联的数据库的名字。一般,我们需要在schema中就定义好。

  1. schema中定义关联数据库

  1. 创建数据库

  1. Population

4.5 Middleware

  • pre: 在指定方法执行之前绑定。

  • post: 相当于事件监听的绑定。

使用范围:

  • doc上:init,validate,save,remove。

  • model上:count,find,findOne,findOneAndRemove,findOneAndUpdate,update

如果你对内容有任何疑问,欢迎提交 ❕issues✉️ email

最后更新于

这有帮助吗?