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).
考虑以下数据结构:
[
{
"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).