查询以获取另一个引用的所有 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阐明了两种子查询类型并仅支持相关子查询。