PHP 预定义变量详解($_GET/$_POST等)

小飞兽 PHP 462 次阅读 2026-06-21

概述

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 官方文档和教程。
  • MongoDB University:免费在线学习平台,提供 MongoDB 认证课程。
  • Robo 3T / Studio 3T:MongoDB 的图形化客户端工具。