1

我有一个图形数据库,其中每个节点都intersects与其相交的节点有关系。此外,intersects还有一个属性degrees(这两个节点相交的角度)。

我想订购以指定角度与给定节点相交的节点。

由于两个节点之间的交集是补充的,我只保存两个节点之间的一个关系(例如, (a)-[:intersects]->(b) 和 (b)-[:intersects]->(a) 是类似的东西,但两者的角度会有所不同,这个角度是补充的)。例如,如果我需要所有城市以 45 度角与城市 A 相交,则两个查询是:

GRAPH.QUERY Nearby "MATCH (a:City { name: 'A' })-[t:intersects]->(b:City) return b.name, b.degrees ORDER BY abs(t.degrees - 45)"

GRAPH.QUERY Nearby "MATCH (a:City { name: 'A' })<-[t:intersects]-(b:City) return b.name, b.degrees ORDER BY abs(abs(t.degrees - 180) - 45)"

我想将这两个查询合二为一(避免在客户端库中进行排序)。可以在redis图中做到吗?我打算尝试(a)-[:intersects]-(b)使用这个案例......但似乎对获取 src 节点的支持尚不可用。

任何帮助将非常感激。

4

1 回答 1

1

考虑以下:

MATCH (a:City {name: 'A'})-[t0:intersects]->(b:City)
WITH a, collect({x:b, angle:abs(t0.degrees - 45)}) AS a_to_b
MATCH (a)<-[t1:intersects]-(c:City)
WITH a_to_b, collect({x:c, angle:abs(abs(t1.degrees - 180) - 45)}) AS c_to_a
WITH a_to_b + c_to_a AS intersections
UNWIND intersections AS city
RETURN city.x ORDER BY city.angle
于 2021-03-31T18:53:29.067 回答