RavenDB NodeJS:查询时加载关联文档并生成嵌套结果
解决方案
完全可以实现你要的嵌套结构,你的代码主要在include用法和QueryData字段映射上出了问题,修正后就能得到预期结果:
原代码的问题点:
include参数错误:你用了硬编码的路径agents/${agentDocumentId},但正确用法是传入索引中存储关联文档ID的字段名,也就是agentDocumentId,会话会自动根据这个字段的值加载对应的agent文档。QueryData的字段映射顺序不匹配:源字段和目标字段的顺序必须一一对应,你之前的映射关系完全错位了。
修正后的代码:
// 正确配置QueryData:源字段与目标字段一一对应 const queryData = new QueryData( ["name", "agentDocumentId", "agent.firstName", "agent.lastName"], ["companyName", "user.documentId", "user.firstName", "user.lastName"] ); return await session.query<ICompanyView>({ index: Company_All }) .whereEquals("id", request.companyId) // 若索引中存储公司ID的字段确实是`companyId`,则保留原写法即可 .include("agentDocumentId") // 传入关联ID的字段名,自动加载对应的agent文档 .selectFields(queryData, ICompanyView) .single();
关键说明:
- include的正确用法:
.include("agentDocumentId")会告诉会话,根据当前文档的agentDocumentId字段值,加载对应的agent文档,之后就能在查询中通过agent.xxx访问agent的字段。 - QueryData映射规则:源数组的每个元素对应目标数组的同位置元素,比如:
name→companyNameagentDocumentId→user.documentIdagent.firstName→user.firstNameagent.lastName→user.lastName
- 类型匹配:query的泛型直接指定为
ICompanyView,确保返回结果的类型正确。
内容的提问来源于stack exchange,提问作者amir
相关产品推荐
相关产品推荐

