azure-cosmosdb - 没有属性名称的嵌套数组上的 Cosmos DB SQL
问题描述
假设以下模式的文档
{
"id": 1,
"children":[
{"id": "a", "name":"al"},
{"id": "b", "name":"bob"}
]
}
我想返回所有子数组的数组,但在根级别的 id 属性上进行过滤。以下是最知名的替代方案和限制:
SELECT * FROM c.children
上面的 SQL 提供了正确形状的数组数组,但它不允许我在文档的 ROOT 级别的 ID 处进行过滤。
SELECT children FROM c WHERE c.id >= 1
以上允许过滤,但返回一个对象数组,所有对象的“children”属性都包含该数组。
SELECT child.id, child.name FROM c JOIN child in c.children WHERE c.id >= 1
以上允许过滤,但返回一个对象数组。与前面的示例不同,对象被展平到子级别,例如不存在名为“children”前缀的属性。
再次,返回的数组中的子元素的排序和分组在客户端很重要,因此希望将父元素的所有子元素分组到一个数组中。第一个查询完成不允许过滤。
解决方案
请尝试以下 SQL:
SELECT value c.children FROM c WHERE c.id >= 1
结果:
[
[
{
"id": "a",
"name": "al"
},
{
"id": "b",
"name": "bob"
}
]
]
推荐阅读
- vue.js - TipTap/VueJS - 如何检测按键
- javascript - 两个不同画布上的 document.onkeydown 冲突
- cassandra - 如何更改 cassandra/scylla 中的默认压缩策略?
- swiftui - 在 Swift UI 中删除列表条目
- aws-lambda - 如何使用 Lambda 创建 GraphQL 子解析器
- javascript - 错误:无效的语法。默认选项不允许超过“2”次。键入“SETX /?” 供使用
- swift - Swift - 为评论构建类似 instagram 的用户认证表视图
- django - 注册表单cleaned_data
- python - Docker 拉取镜像失败
- python - 在 Pyspark 中使用 python 多线程将数据并行写入表