深度 Populate(嵌套填充)功能文档
🎯 功能概述
深度 populate 允许你在填充关联数据时,进一步填充关联数据的关联数据,形成多层嵌套的数据结构。
版本: v1.3.0+
状态: ✅ 已实现
📖 使用方法
1. 基本嵌套 populate
填充 posts 关联,然后进一步填充 posts.comments 关联:
2. 嵌套 populate 对象配置
嵌套 populate 也支持完整的配置选项:
3. 多层嵌套 populate
支持 3 层或更多层的嵌套:
4. 嵌套多个 populate
在嵌套层级可以同时填充多个关联:
5. 混合使用链式和嵌套 populate
可以同时使用链式 populate 和嵌套 populate:
📋 完整示例
Model 定义
查询示例
🔧 技术实现
核心逻辑
- 嵌套检测: 在
_populatePath()中检测config.populate参数 - 递归填充: 调用
_executeNestedPopulate()处理嵌套逻辑 - Model 查找: 根据集合名动态获取 Model 定义
- 临时实例: 为嵌套层创建临时 ModelInstance
- 递归执行: PopulateBuilder 递归调用自身实现多层嵌套
关键代码
⚠️ 注意事项
1. Model 必须定义
嵌套 populate 要求被填充的集合必须有对应的 Model 定义。如果没有定义,嵌套 populate 将被跳过:
2. 性能考虑
深度 populate 会执行多次数据库查询,注意性能影响:
优化建议:
- 使用
select只选择必要字段 - 使用
limit限制关联数据数量 - 避免过深的嵌套(建议不超过 3 层)
3. 循环引用
避免循环引用导致无限递归:
解决方案:谨慎设计数据模型,避免双向嵌套。
📊 兼容性
🧪 测试用例
完整测试用例请参考:
test/integration/model/model-features.test.tstest/integration/model/model-schema-and-hooks.test.ts
测试覆盖:
- ✅ 基本嵌套 populate
- ✅ 嵌套 populate 对象配置
- ✅ 3 层嵌套
- ✅ 嵌套多个 populate
- ✅ 混合链式和嵌套
📚 相关文档
更新日期: 2026-01-07
版本: v1.3.0+
状态: ✅ 已实现并测试