【问题标题】:Query to get all Cosmos DB documents referenced by another查询以获取另一个引用的所有 Cosmos DB 文档
【发布时间】:2021-01-15 22:15:19
【问题描述】:

假设我有以下 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) 检索“组”文档,2) 对“项目”分区执行带有 IN 子句的查询。

由于除了获取 id 列表之外我不关心“组”文档,是否可以构造一个查询来获取我想要的所有“项目”文档,只需要“组”文档 id ?

【问题讨论】:

    标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    您需要执行两个查询,因为单独的文档之间没有连接。尽管支持子查询,但目前仅支持 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 阐明了两种子查询类型并仅支持相关子查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2019-02-08
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多