MongoDB Cheat Sheet

1. 核心概念对比

MongoDB 概念 关系型数据库 (SQL) 对应 描述
Database (数据库) Database 集合的容器。
Collection (集合) Table (表) 数据库中的一组文档。
Document (文档) Row (行) 集合中的一条记录。不同文档不必拥有相同的结构。
Field (字段) Column (列) 文档中的键值对。Field 可以是 JSON 对象或数组。

2. 安装与启动

  • Windows: $ choco install mongodb -y
  • Linux:
    • Redhat: sudo yum install -y mongodb-org
    • Ubuntu/Debian: sudo apt-get update; sudo apt-get install -y mongodb-org
    • Fedora: sudo dnf install mongodb-org
  • Mac:
    • 安装: brew tap mongodb/brew; brew install mongodb-community
    • 启动: brew services start mongodb-community

3. Shell 基本命令

所有命令通常在 mongosh 环境中执行:

  • mongosh: 连接到本地实例。
  • show dbs / show databases: 显示所有数据库。
  • use <dbname>: 切换到指定数据库。
  • db: 显示当前所在的数据库名称。
  • show collections: 显示当前库中的所有集合 。
  • cls: 清屏。
  • db.dropDatabase(): 删除当前数据库。

4. CRUD 操作

创建 (Create)

  • 插入单条: db.collection.insertOne({name: "老杨"})
  • 插入多条: db.collection.insertMany([{name: "李四"}, {name: "王五"}])

读取 (Read)

  • 查询所有: db.collection.find()
  • 条件查询: db.collection.find({name: "老杨"})
  • 指定字段返回 (Projection): db.collection.find({name: "老杨"}, {name: 1, email: 1}) (1表示返回,0表示不返回)
  • 查询单条: db.collection.findOne({level: 1}) (只返回第一条匹配的)
  • 统计: db.collection.countDocuments({condition})
  • 修饰符:
    • .sort({field: 1}): 1为升序,-1为降序。
    • .limit(n): 限制返回 n 条。
    • .skip(n): 跳过前 n 条。

更新 (Update)

  • 命令:
    • updateOne: 更新匹配的第一条。
    • updateMany: 更新匹配的所有条。
    • replaceOne: 完全替换匹配的文档。
    • save: 替换已有文档或插入新文档。
  • 常用操作符:
    • $set: 更新指定字段,不影响其他字段。
    • $inc: 递增/递减字段值。
    • $rename: 重命名字段。
    • $unset: 删除字段。
    • $push: 向数组添加元素 (不排重)。
    • $addToSet: 向数组添加元素 (排重,若存在则不加)。
    • $pull: 从数组移除元素。

删除 (Delete)

  • deleteOne: 删除匹配的第一条。
  • deleteMany: 删除匹配的所有条。

5. 过滤操作符 (Filter Operators)

类型 操作符 描述
比较 $eq / $ne 等于 / 不等于。
$gt / $gte 大于 / 大于等于。
$lt / $lte 小于 / 小于等于。
$in / $nin 值在列表内 / 值不在列表内。
逻辑 $and 所有条件均为真。
$or 至少一个条件为真。
$not 条件取反。
元素 $exists 检查字段是否存在。

6. 进阶查询:$expr (表达式)

$expr 允许在 find 查询中使用聚合表达式。这是处理复杂查询(如字段间比较)的关键工具。

核心功能

  1. 字段间比较: 对比同一个文档中的 A 字段和 B 字段。
  2. 使用聚合函数: 在普通查询中使用 $size, $cond 等聚合操作符。

语法注意

  • $expr 内部引用字段时,必须加上 $ 前缀 (例如 "$price" 而不是 "price")。

常见场景示例

场景 1:查找字段 A 大于 字段 B 的文档

(例如:查找支出 spent 超过预算 budget 的记录)

1
2
3
4
5
db.finance.find({
$expr: {
$gt: [ "$spent", "$budget" ]
}
})

场景 2:基于数组长度查询 (例如:数组长度 > 1)

普通查询无法直接对数组长度做 $gt 判断,必须使用 $expr 配合 $size。

1
2
3
4
5
db.Asset.find({
$expr: {
$gt: [ { $size: "$ips" }, 1 ]
}
})

7. 聚合 (Aggregation)

用于数据处理和计算,通常通过管道 (pipeline) 进行。

  • 常用阶段与操作符:
    • $sum: 计算总和。
    • $avg: 计算平均值。
    • $min / $max: 获取最值。
    • $first / $last: 获取第一条/最后一条文档数据。
    • $push: 在聚合过程中将值加入数组。