Select 个来自 Cosmos DB 的查询中的相关文档

Select related documents in one query from Cosmos DB

考虑以下数据结构:

[   
    {
        "id": "parent",
        "links":[{
                "href": "child"
            }]
    },
    {
        "id": "child",
        "links":[{
                "href": "grand_child"
            }]
    },
    {
        "id": "grand_child",
        "links":[]
    },
    {
        "id": "some-other-item",
        "links":[{
            "href": "anywhere"
        }]
    }
]

有没有办法 select 使用 Cosmos DB SQL 单个查询 中与“父级”相关的所有文档? 结果必须包括父文档、子文档和 grand_child 个文档。

这里假设 OP 中显示的 JSON 数组是您集合中的文档数组。

不,这无法使用 SQL API 查询工具 完成。 CosmosDB 不支持加入不同的文档,更不用说递归了。 Joins in CosmosDB SQL are self-joins.

但是,如果您确实需要在服务器端执行此操作,则可以通过将其编写为 Used Defined Function 脚本来实现递归收集算法。虽然很丑,恕我直言。

我建议只在客户端实现这个,每个深度单个查询并合并结果。这也很好地分离了逻辑和数据,如果您在单个查询中正确查询所有新链接以避免 (1+N),那么性能应该是可以接受的。

如果您的实际需求在图遍历方面变得更加复杂,那么您必须将您的文档(或只是链接)迁移到其他能够查询图的地方(例如:Gremlin API).