MongoDB CRUD 操作指南(类比 MySQL)

15 150~193 分钟

快速对比表

操作类型

MySQL 语法

MongoDB 语法

创建数据库

CREATE DATABASE shop;

use shop (隐式创建)

创建表

CREATE TABLE users(...);

db.createCollection("users")

插入文档

INSERT INTO users VALUES (...);

db.users.insertOne({name: "John"})

查询文档

SELECT * FROM users;

db.users.find()

更新文档

UPDATE users SET age=20 WHERE id=1;

db.users.updateOne({_id:1}, {$set: {age:20}})

删除文档

DELETE FROM users WHERE id=1;

db.users.deleteOne({_id:1})


详细操作说明

1. 插入文档

 // 插入单条文档(类比 INSERT INTO)
 db.users.insertOne({
     name: "Alice",
     age: 25,
     email: "alice@example.com",
     tags: ["vip", "early-adopter"]
 })
 ​
 // 插入多条文档
 db.users.insertMany([
     {name: "Bob", age: 30},
     {name: "Charlie", age: 35}
 ])

2. 查询文档

基础查询

 // 查询所有文档(SELECT * FROM users)
 db.users.find()
 ​
 // 条件查询(SELECT * FROM users WHERE age = 25)
 db.users.find({ age: 25 })
 ​
 // 比较操作符 $gt, $lt, $gte, $lte
 db.users.find({ age: { $gt: 30 } }) // WHERE age > 30

指定输出字段

 // 只返回name和email字段(SELECT name, email FROM users)
 db.users.find({}, { name: 1, email: 1, _id: 0 })

排序

 // 按age降序排序(ORDER BY age DESC)
 db.users.find().sort({ age: -1 })

分页

 // 跳过前10条,取5条(LIMIT 5 OFFSET 10)
 db.users.find().skip(10).limit(5)

3. 更新文档

 // 更新单个文档(UPDATE ... SET)
 db.users.updateOne(
     { name: "Alice" },
     { 
         $set: { age: 26 },      // 修改字段
         $push: { tags: "2023" }  // 数组追加元素
     }
 )
 ​
 // 更新多个文档
 db.users.updateMany(
     { age: { $lt: 30 } },
     { $set: { status: "young" } }
 )
 ​
 // 使用upsert(不存在时创建新文档)
 db.users.updateOne(
     { name: "David" },
     { $set: { age: 40 } },
     { upsert: true }
 )

4. 删除文档

 // 删除单个文档
 db.users.deleteOne({ name: "Charlie" })
 ​
 // 删除多个文档
 db.users.deleteMany({ age: { $gt: 30 } })

高级查询技巧

逻辑操作符

 // AND 查询(WHERE age > 20 AND status = "active")
 db.users.find({ 
     $and: [
         { age: { $gt: 20 } },
         { status: "active" }
     ]
 })
 ​
 // OR 查询
 db.users.find({
     $or: [
         { age: { $lt: 18 } },
         { age: { $gt: 65 } }
     ]
 })

正则查询

// 模糊查询(LIKE '%son%')
db.users.find({ name: /son/i }) // i表示不区分大小写

数组查询

// 查询包含特定元素的数组
db.users.find({ tags: "vip" })          // 数组包含"vip"
db.users.find({ tags: { $all: ["vip", "early-adopter"] } }) // 同时包含多个元素

术语对比表

MySQL 术语

MongoDB 术语

Database

Database

Table

Collection

Row

Document

Column

Field

Index

Index

JOIN

$lookup (聚合阶段)


上一篇 从零开始:在自有服务器上搭建一套完整的Git代码部署工作流