分类

MongoDB

03-MongoDB 关联查询:N+1 慢查询、两次查询法与 $lookup
MongoDB关联查询有嵌入、两次查询法与$lookup三条路。N+1是循环逐条查,往返随数据量增长并可能占满连接池;两次查询法应一次IN批量取、id去重分批、先分页主表再关联、空列表短路并用Map拼装。关联数据只展示时两次查询法足够,若参与过滤、排序、分页或关联表更大,需用$lookup下推数据库。使用$lookup要给关联字段建索引,注意$unwind默认INNER JOIN语义,以及相关子查询和$expr索引限制。选型优先级为嵌入、两次查询法、$lookup,并可用profiler发现N+1。
2026-10-21
|
4
|
0
|
0
02-MongoDB 索引与查询性能:复合索引、覆盖查询与执行计划
MongoDB 无索引会全集合扫描(COLLSCAN)。复合索引字段顺序决定可用查询,应按 ESR 排列:等值、排序、范围;建完必须用 explain("executionStats") 验证,重点看 totalDocsExamined 与 nReturned 是否同量级,否则索引可能未有效筛选。覆盖查询要求查询与返回字段都在同一索引中,并显式排除 _id,从而省去 FETCH。深分页用 skip 会线性变慢,应改为基于游标的键集分页,且排序键需有索引并用 _id 保证唯一顺序。部分索引通常是稀疏索引的超集;TTL 索引仅支持单字段,后台约每 60 秒清理。索引会带来写放大和存储成本,应依据实际慢查询设计,而非给每个字段盲目建索引。
2026-10-20
|
2
|
0
|
0
01-MongoDB 基础:文档模型、CRUD 与聚合管道
文章梳理MongoDB 9.0的文档模型、BSON与_id、嵌入/引用建模、增删改查和聚合管道。核心结论:BSON强类型导致类型不一致时查询可能静默无结果,投产应加validator防脏数据;嵌入适合随父读取且有上限的数据,引用适合无上限、需独立查询或共享的数据;写关注默认w:"majority",insert/update/remove已废弃,应改用新API;聚合中$match应前置以走索引。Spring Boot 4.x配置前缀改为spring.mongodb.*,照旧文会静默连错库。读者可避开类型、建模、写入语义和版本迁移中的常见坑。
2026-10-20
|
10
|
0
|
0