查询以获取另一个引用的所有 Cosmos DB 文档
Query to get all Cosmos DB documents referenced by another
假设我有以下 Cosmos DB 容器和可能的文档类型分区:
{
"id": <string>,
"partitionKey": <string>, // Always "item"
"name": <string>
}
{
"id": <string>,
"partitionKey": <string>, // Always "group"
"items": <array[string]> // Always an array of ids for items in the "item" partition
}
我有“组”文档的 ID,但我没有文档本身。我想做的是执行一个查询,该查询为我提供“组”文档引用的所有“项目”文档。
我知道我可以执行两个查询:1) 检索“group”文档,2) 在“item”分区上执行带有 IN 子句的查询。
除了获取 ID 列表之外,我不关心“组”文档,是否可以构建一个查询来获取我想要的所有“项目”文档,而只需要“组”文件编号?
您需要执行两个查询,因为单独的文档之间没有联接。尽管支持子查询,但目前仅支持 correlated 子查询(意思是,内部子查询引用外部查询的值)。不相关的子查询是您所需要的。
请注意,即使您不需要 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"
此documentation page阐明了两种子查询类型并仅支持相关子查询。
假设我有以下 Cosmos DB 容器和可能的文档类型分区:
{
"id": <string>,
"partitionKey": <string>, // Always "item"
"name": <string>
}
{
"id": <string>,
"partitionKey": <string>, // Always "group"
"items": <array[string]> // Always an array of ids for items in the "item" partition
}
我有“组”文档的 ID,但我没有文档本身。我想做的是执行一个查询,该查询为我提供“组”文档引用的所有“项目”文档。
我知道我可以执行两个查询:1) 检索“group”文档,2) 在“item”分区上执行带有 IN 子句的查询。
除了获取 ID 列表之外,我不关心“组”文档,是否可以构建一个查询来获取我想要的所有“项目”文档,而只需要“组”文件编号?
您需要执行两个查询,因为单独的文档之间没有联接。尽管支持子查询,但目前仅支持 correlated 子查询(意思是,内部子查询引用外部查询的值)。不相关的子查询是您所需要的。
请注意,即使您不需要 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"
此documentation page阐明了两种子查询类型并仅支持相关子查询。