Age*_*dum 2 azure azure-cosmosdb azure-cosmosdb-sqlapi
假设我有以下 Cosmos DB 容器,其中包含可能的文档类型分区:
{
"id": <string>,
"partitionKey": <string>, // Always "item"
"name": <string>
}
Run Code Online (Sandbox Code Playgroud)
{
"id": <string>,
"partitionKey": <string>, // Always "group"
"items": <array[string]> // Always an array of ids for items in the "item" partition
}
Run Code Online (Sandbox Code Playgroud)
我有一个“组”文档的 ID,但我没有该文档本身。我想做的是执行一个查询,为我提供“组”文档引用的所有“项目”文档。
我知道我可以执行两个查询:1)检索“group”文档,2)在“item”分区上使用 IN 子句执行查询。
由于除了获取 id 列表之外,我不关心“组”文档,因此是否可以构造一个查询来仅使用“组”文档 id 来获取我想要的所有“项目”文档?
您需要执行两个查询,因为单独的文档之间没有联接。尽管支持子查询,但当前仅支持相关子查询(这意味着内部子查询引用外部查询中的值)。您需要的是不相关的子查询。
请注意,即使您不需要所有文档group,也不需要检索整个文档。您可以仅投影items属性,然后可以在第二个查询中使用类似array_contains(). 就像是:
SELECT VALUE g.items
FROM g
WHERE g.id="1"
AND g.partitionKey="group"
SELECT VALUE i.name
FROM i
WHERE array_contains(<items-from-prior-query>,i.id)
AND i.partitionKey="item"
Run Code Online (Sandbox Code Playgroud)
本文档页面阐明了两种子查询类型并仅支持相关子查询。
| 归档时间: |
|
| 查看次数: |
1669 次 |
| 最近记录: |