我有一个火车网络的 gremlin 图结构。顶点是站点,具有站点 ID 和名称作为属性。边缘是带有路线、公里数和停止顺序的轨道。
大约有 840 个站点和 24 条路线连接它们。正如我们可以想象的那样,这些站点是由路线连接的,任何两个站点都可以通过多条路线连接。也有循环路线,即在同一个站点开始和停止。有些站点既是不同路线的起点又是终点。
我想问的问题是,如果给定的站点无法使用,我如何才能获得受影响的来源和目的地。即获取通过它的路线并获取给定路线的来源和目的地。
似乎是一个简单的问题,但我不知道 gremlin 足以回答这个问题。:)
到目前为止,以下是我最接近答案的一个。给定车站、路线和最终终点站,我能够获得介于两者之间的所有车站。
理想的情况是,给定车站,给出所有受影响的路线,包括到最终目的地的路线和来自源头的路线。
我无法根据边的属性连接顶点。就像根据路由连接顶点而不给出值一样。此外,在叶节点处终止重复。即没有其他目的地可以连接。如果我可以删除直到 hasID,那将是一个胜利。:)
g.V().has("id", "17892")
.repeat(outE().has("route","3-96-mjp-1").inV())
.until(hasId("6147"))
.path()
示例结构如下:
g.V().has("id", "17892").outE().path() -->> "objects": [
{
"id": "17892",
"label": "stop",
"type": "vertex",
"properties": {
"stop_id": [
{
"id": "f2eb562e-e362-427c-91ef-02769cfda721",
"value": "17892"
}
],
"stop_name": [
{
"id": "b873d980-8d07-44e7-aa45-5be1afad4a63",
"value": "10-Albert St/Nicholson St (East Melbourne)"
}
]
}
},
{
"id": "242fa97f-134d-439a-b8ab-0b4d8b8da9bc",
"label": "nextStop",
"type": "edge",
"inVLabel": "stop",
"outVLabel": "stop",
"inV": "17893",
"outV": "17892",
"properties": {
"distance": 125,
"route": "3-35-mjp-1",
"stopSeq": 17
}
}
]
我在 Azure CosmosDB Graph 中执行此操作。