Azure Cosmos DB测试数据结构与最新运行记录查询咨询
Azure Cosmos DB 测试数据方案问题解答
一、如何区分project与testresult文档
- 给所有文档添加固定的
type字段:- project文档添加
"type": "project" - testresult文档添加
"type": "testresult"
- project文档添加
- 后续查询、操作时,通过
type字段过滤,避免不同类型文档互相干扰。
二、当前数据结构合理性分析
现有结构的优势
- 单容器存储比多容器更适配你当前的查询需求(按项目查最新测试结果),无需跨容器关联,查询性能更高。
- testresult嵌入项目标识,能直接基于项目维度聚合测试数据。
需要优化的点
- 避免冗余存储项目名称:如果project的名称可能变更,testresult里存
projectName会导致数据不一致。建议只存projectId,需要名称时通过关联project文档获取。 - 保证关联字段一致性:project存储元数据、testresult存储测试运行数据的分工合理,但要确保
projectId在两类文档中完全匹配。
三、获取各项目最新测试记录的查询语句
场景1:testresult仅存projectId,需关联project取名称
SELECT p.name AS projectName, tr.starttime AS latestStartTime, tr.testData AS latestTestData FROM testresult tr -- 关联project文档获取名称 JOIN p IN ( SELECT * FROM project WHERE project.type = "project" AND project.id = tr.projectId ) WHERE tr.type = "testresult" -- 筛选当前项目的最新测试时间 AND tr.starttime = ( SELECT MAX(tr2.starttime) FROM testresult tr2 WHERE tr2.type = "testresult" AND tr2.projectId = tr.projectId )
场景2:testresult已存projectName(名称不常变更)
SELECT tr.projectName, tr.starttime AS latestStartTime, tr.testData AS latestTestData FROM testresult tr WHERE tr.type = "testresult" AND tr.starttime = ( SELECT MAX(tr2.starttime) FROM testresult tr2 WHERE tr2.type = "testresult" AND tr2.projectId = tr.projectId )
原查询返回0结果的可能原因
- 未通过
type字段过滤,导致查询范围包含project文档,或未匹配到有效testresult数据; starttime格式不是可排序的ISO 8601格式(例如"2024-05-20T10:00:00Z"),导致MAX函数无法正确计算;- testresult文档中的
projectId与project文档的id不匹配,或容器内无testresult数据。
内容的提问来源于stack exchange,提问作者xtreampb
相关产品推荐
相关产品推荐

