Docker 网络配置详解
概述
MongoDB 是最流行的 NoSQL 文档型数据库,它以 JSON 格式的文档(BSON)为数据模型,支持灵活的 schema 设计。MongoDB 以高性能、高可用性和易扩展性著称,非常适合处理半结构化数据、快速迭代的业务场景和需要处理海量数据的应用。本文系统介绍 MongoDB 的安装、CRUD 操作、索引管理和聚合管道等核心内容。
基础语法
MongoDB 的核心概念与关系型数据库不同:数据库(Database)包含集合(Collection),集合包含文档(Document)。文档是 MongoDB 的基本数据单元,类似于 JSON 对象。
- Database:数据库,一个 MongoDB 实例可以管理多个数据库。
- Collection:集合,相当于关系型数据库的表,但不强制 schema。
- Document:文档,一条记录,以 BSON 格式存储。
- _id:每个文档的唯一标识符,MongoDB 自动创建 ObjectId。
完整代码示例+注释
// === 数据库和集合操作 ===
use myapp
db.createCollection('users')
// === 插入文档 ===
db.users.insertOne({
name: "张三",
email: "zhangsan@example.com",
age: 28,
skills: ["Python", "MongoDB", "Docker"],
profile: {
city: "北京",
title: "后端工程师"
},
created_at: new Date()
});
db.users.insertMany([
{ name: "李四", email: "lisi@example.com", age: 32 },
{ name: "王五", email: "wangwu@example.com", age: 25 }
]);
// === 查询文档 ===
db.users.find()
db.users.find({ age: { $gte: 25 }, "profile.city": "北京" })
db.users.findOne({ email: "zhangsan@example.com" })
db.users.find({}, { name: 1, email: 1, _id: 0 })
db.users.find({ skills: "Python" })
db.users.find({ name: /^张/ })
db.users.find().sort({ created_at: -1 }).skip(20).limit(10)
// === 更新文档 ===
db.users.updateOne(
{ email: "zhangsan@example.com" },
{
$set: { age: 29 },
$push: { skills: "Go" },
$currentDate: { updated_at: true }
}
);
// === 删除文档 ===
db.users.deleteOne({ email: "zhangsan@example.com" });
db.users.deleteMany({ age: { $lt: 18 } });
db.users.drop()
// === 聚合管道(Aggregation Pipeline) ===
db.users.aggregate([
{ $group: {
_id: "$profile.city",
count: { $sum: 1 },
avg_age: { $avg: "$age" }
}},
{ $sort: { count: -1 } },
{ $limit: 10 }
]);
// === 索引管理 ===
db.users.createIndex({ email: 1 }, { unique: true })
db.users.createIndex({ "profile.city": 1, age: 1 })
db.users.createIndex({ name: "text", email: "text" })
db.users.find({ email: "zhangsan@example.com" }).explain("executionStats")
运行效果
执行上述插入操作后,MongoDB 会自动为每条文档生成唯一的 _id 字段(ObjectId 类型)。查询操作支持链式调用 sort()、skip()、limit() 实现分页。聚合管道是 MongoDB 最强大的功能之一,可以对数据进行多阶段处理。
常见问题
Q1:MongoDB 和 MySQL 的核心区别是什么
MongoDB 是文档型数据库,数据以灵活的 JSON 文档存储,不需要预定义 schema。MySQL 是关系型数据库,数据以行列方式存储,需要预定义表结构。
Q2:MongoDB 的写入性能如何保证
MongoDB 默认采用写确认(Write Concern)模式,数据写入后需要确认才返回。
Q3:如何优化 MongoDB 的查询性能
首先通过 explain() 分析查询计划,确保使用了索引而不是全表扫描。
Q4:MongoDB 支持事务吗
MongoDB 4.0 开始支持多文档事务(Multi-Document ACID Transactions)。
延伸阅读
- MongoDB 官方文档:https://www.mongodb.com/docs/ — 完整的 MongoDB 官方文档和教程。