You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cosmos DB测试数据结构与最新运行记录查询咨询

Azure Cosmos DB 测试数据方案问题解答

一、如何区分project与testresult文档

  • 给所有文档添加固定的type字段:
    • project文档添加 "type": "project"
    • testresult文档添加 "type": "testresult"
  • 后续查询、操作时,通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:52:49