【发布时间】:2022-12-05 11:30:53
【问题描述】:
我要查询Azure Cosmos 数据库文件与数据库接口询问。这些文档应按特定值进行过滤和分组。从这些组中,只应返回具有指定最大值的文档。
例子
Azure CosmosDb 文档
{
"id": "1",
"someValue": "shall be included",
"group": "foo",
"timestamp": "1668907312"
}
{
"id": "2",
"someValue": "shall be included",
"group": "foo",
"timestamp": "1668907314"
}
{
"id": "3",
"someValue": "shall be included",
"group": "bar",
"timestamp": "1668907312"
}
{
"id": "4",
"someValue": "don't include",
"group": "bar",
"timestamp": "1668907312"
}
询问
我想获取所有文件
- 与
"someValue": "shall be included" - 按
group分组 - 仅来自最多
timestamp组
示例响应
{
"id": "2",
"someValue": "shall be included",
"group": "foo",
"timestamp": "1668907314"
},
{
"id": "3",
"someValue": "shall be included",
"group": "bar",
"timestamp": "1668907312"
}
问题
做这个的最好方式是什么?这将是最佳如果
- 在一个查询中是可能的
- 并使用 SqlParameter 与 Azure SDK 一起执行(以防止注入)
我试过的
我当前的方法包含 2 个查询并使用 ARRAY_CONTAINS,这不允许将 SqlParameter 用于文档路径。
{
"id": "2",
"some-value": "shall be included",
"group": "foo",
"timestamp": "1668907314"
}
第一个查询
SELECT c.group AS group
MAX(c.timestamp) AS maxValue
FROM c
WHERE c.someValue = 'shall be included'
GROUP BY c.group
第二个查询
SELECT * FROM c WHERE ARRAY_CONTAINS(
<RESULT-FIRST-QUERY>,
{
"group": c.group,
"maxValue": c.timestamp
},
false
)
【问题讨论】:
标签: azure azure-cosmosdb azure-cosmosdb-sqlapi azure-sdk-for-java