Skip to content

MongoDB:文档、命名空间与连接 ​

数据库保存可查询的持久数据。MongoDB 的数据库下面是集合,集合里面是文档;文档由字段和值组成,可以包含数组和内嵌文档。它不是“把所有 JSON 文件直接扔进一个目录”,仍需要设计模型、索引、权限和恢复策略。

本课面向 MongoDB Server 8.0 版本族、PyMongo 4.x(示例声明 >=4.10,<5)、独立安装的 mongosh 与 Database Tools。核对日期:2026-10-17,未承诺任意补丁和托管兼容实现相同。全部示例未执行,没有启动服务、连接账户或安装依赖。

BSON 与 JSON 的区别 ​

MongoDB BSON 是带类型的二进制文档表示,除 JSON 常见值外还有 ObjectId、日期、二进制、Decimal128 等。字符串 "42" 和数字 42 不相同,日期字符串也不会自动成为 BSON Date。本例主动使用字符串 _id,因此输出能被标准 JSON 编码;真实 ObjectId 需要 Extended JSON 或显式转换。官方 BSON 类型

一个文档有唯一 _id;集合普通情况下自动提供 _id 唯一索引。BSON 文档有 16 MiB 大小上限,不能把无限增长的事件历史或附件一直追加到同一个文档。金额应明确 Decimal128 或整数最小单位,避免浮点比较产生业务歧义。字段缺失与字段为 null 的语义也必须在查询时区分。

命名空间与认证数据库 ​

MongoDB authSource 指认证用户所在数据库,不等于保存业务文档的数据库。连接串的主机、目标数据库、authSource、replicaSet 和 TLS 共同表达连接意图。use theory_tasks 在 mongosh 中切换数据库上下文,不会单凭切换动作创建持久数据库;真正写入或显式建集合才涉及持久内容。官方连接说明

生产权限应限定到所需集合和操作,不能把开放 bindIp 当作可用性配置就结束;还要评估认证、网络和 TLS。SRV 连接依赖 DNS 和相应驱动能力,不代表已经认证成功。本文只解释配置,不提供默认云账户或远程目标。

mongosh 查询与写入 ​

MongoDB mongosh 使用 JavaScript 风格对象表达过滤器,find 返回游标,投影决定字段,sort 决定顺序,limit 限制数量。db.tasks.find({status:"open"},{owner:1}).sort({_id:1}).limit(20) 仍默认返回 _id。updateOne 的 $set 修改指定字段,替换整个文档是不同操作;deleteOne 则删除匹配的一条,过滤条件必须足够精确。官方 CRUD

原有命令入口仍保留;它们的占位字段需要读者替换为自己已批准的环境。本轮未运行任何 mongosh 命令。练习:为什么 find 不写 sort 无法承诺稳定第一页?解答:存储与执行计划没有替你规定业务排序,分页应使用明确且唯一的排序键。

前置自检 ​

请把一条任务记录画成文档,写出 _id、owner、status 和 version 四个字段及各自类型。参考:字符串任务号、字符串所有者、有限状态字符串、非负整数版本。随后阅读模型与一致性,解释把状态和版本放在同一文档如何帮助条件更新。

继续阅读