【问题标题】:CosmosDb nested array query projectionCosmosDb 嵌套数组查询投影
【发布时间】:2021-02-17 18:15:28
【问题描述】:

我想从存储在 CosmosDb 中的文档内的嵌套数组中提取特定的数据。这与我当前过度获取的数据超出报告所需数据的报告用例有关。

我正在使用来自 https://www.documentdb.com/sql/demo 的操场上的示例文档来说明我正在尝试做的事情的示例。结构如下:

{
    "id": "03226",
    "description": "Babyfood, dessert, fruit pudding, orange, strained",
    "version": 1,
    "foodGroup": "Baby Foods",
    "servings": [{
            "amount": 1,
            "description": "oz",
            "weightInGrams": 28.35
        }, {
            "amount": 1,
            "description": "jar",
            "weightInGrams": 113
        }
    ],
}

假设我想获取根 id 属性和服务对象的“描述”属性,我想要的输出是这样的:

{
    "id": "03226",
    "servings": [{
            "description": "oz"
        }, {
            "description": "jar"
        }
    ]
}

这是我按照自己的意愿塑造结果的收盘价。

SELECT 
VALUE 
 {
   "id": c.id,
   "servings": [
      {
       "description": s.description
       }
   ]
 }

FROM c
JOIN s IN c.servings

但是,结果似乎只抓取了服务数组中的第一项。

{
  "id": "03226",
  "servings": [
    {
      "description": "oz"
    }
  ]
}

我无法找到任何没有硬编码诸如服务[0] 之类的嵌套对象投影的示例。我该如何解决这个问题?

【问题讨论】:

    标签: azure-cosmosdb


    【解决方案1】:

    您应该使用 ARRAY 表达式从子查询的结果构造一个数组来实现这一点。

    请试试这个 SQL:

    SELECT 
        c.id,ARRAY(SELECT s.description FROM s IN c.servings) AS servings 
    FROM c
    

    结果:

    [
        {
            "id": "03226",
            "servings": [
                {
                    "description": "oz"
                },
                {
                    "description": "jar"
                }
            ]
        }
    ]
    

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 1970-01-01
      • 2018-02-20
      • 2015-05-12
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多