azure-cosmosdb - Azure Cosmos SQL - 使用嵌套数组并使用 LIKE 关键字

标签 azure-cosmosdb azure-cosmosdb-sqlapi

有一段时间,当我不得不通过特定值查找数组的特定元素时,我一直在使用 ARRAY_CONTAINS 函数。现在我有带有嵌套数组的文档,我必须在其中搜索特定值,但使用正则表达式。

作为文档示例,让我使用官方文档中的一个:

{
  "id": "AndersenFamily",
  "lastName": "Andersen",
  "parents": [
     { "firstName": "Thomas" },
     { "firstName": "Mary Kay"}
  ],
  "children": [
     {
         "firstName": "Henriette Thaulow",
         "gender": "female",
         "grade": 5,
         "pets": [{ "givenName": "Fluffy" }]
     }
  ],
  "address": { "state": "WA", "county": "King", "city": "Seattle" },
  "creationDate": 1431620472,
  "isRegistered": true
}

我需要的是选择并完全获取所有文档,其中至少有一个 children 至少有一个 pets 元素,其中 givenName 包含“绒毛”。

我构建什么 SQL 查询来实现它?

最佳答案

这是一个使用 JOINs 的查询展平内部 pets 数组并应用过滤器,然后返回整个匹配的家庭项目:

SELECT VALUE f
FROM Families f
JOIN c IN f.children
JOIN p IN c.pets
WHERE p.givenName LIKE "%Fluf%"

弄清楚此类查询的复杂性是我认为值得考虑将数据建模为尽可能平坦的原因之一,包括规范化以具有单独的 pets 项目,例如,可以查询使用直接属性过滤器而不处理嵌套。根据您的目标,将所有内容组合成一个大型 Family 对象在实践中不一定是一个好主意,具体取决于您的目标。

关于azure-cosmosdb - Azure Cosmos SQL - 使用嵌套数组并使用 LIKE 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68681509/

相关文章:

azure - 如何查询 CosmosDB 的嵌套对象值

javascript - 通过复杂类型 cosmosDB azure 的存储过程进行批量更新

database - 如何仅在 Azure Cosmos DB 中的文档创建(而不是修改)后触发 Azure 函数?

azure - 如何查询 cosmos db 数组以找到所有项目的完全匹配

visual-studio - 如何使用 docker-compose 启动 CosmosDB 模拟器?

azure-cosmosdb - CosmosDB 创建 - API 选项(SQL 与 Graph)

azure - ARM 模板是否会覆盖脚本创建的现有资源?

azure-cosmosdb - 插入文档时响应状态码不表示成功

azure - 就像 Azure COSMOS SDK 中的 Upsert 操作一样,我们是否有 PATCH + INSERT 操作

azure - CosmosDB 容器未创建