是否有任何方法可以在AGE中的Cypher查询中进行子查询?



我创建了几个名为routes的节点,并使用以下查询给出了旅行时间的几个关系:

SELECT *
FROM cypher('Map', $$
CREATE (a:Route {name: 'A'}), 
(b:Route {name: 'B'}),
(c:Route {name: 'C'}),
(d:Route {name: 'D'}),
(e:Route {name: 'E'}),
(f:Route {name: 'F'}),
(a)-[:Connects {time: 4}]->(b),
(a)-[:Connects {time: 2}]->(c),
(b)-[:Connects {time: 6}]->(c),
(b)-[:Connects {time: 9}]->(d),
(c)-[:Connects {time: 1}]->(d),
(c)-[:Connects {time: 8}]->(e),
(c)-[:Connects {time: 3}]->(f),
(d)-[:Connects {time: 3}]->(a),
(e)-[:Connects {time: 10}]->(b),
(f)-[:Connects {time: 2}]->(e)
$$) AS (x agtype);

然后,我尝试找到指定路线的所有可能连接以及总旅行时间,例如从路线'A'到路线'F'使用查询:

SELECT * FROM cypher('Map', $$
MATCH paths = (a:Route {name: 'A'})-[:Connects *]->(b:Route {name: 'F'})
WITH paths, relationships(paths) AS rels
UNWIND rels AS rel
WITH nodes(paths) AS nodes,
collect(rel.time) AS routes,
sum(rel.time) AS travelTime
RETURN nodes, routes, travelTime
$$) AS (nodes agtype, routes agtype, travelTime agtype)
ORDER BY travelTime;

给出了我的结果:

                                                                                                                                                                                                                                                                                                nodes                                                                                                                                                                                                                                                                                                                                                                       |          routes           | traveltime
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------+------------
[{"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131974, "label": "Route", "properties": {"name": "F"}}::vertex]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | [2, 3]                    | 5
[{"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131974, "label": "Route", "properties": {"name": "F"}}::vertex]                                                                                                                                                                                                                                                                                                                                                                                                                 | [4, 6, 3]                 | 13
[{"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131972, "label": "Route", "properties": {"name": "D"}}::vertex, {"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131974, "label": "Route", "properties": {"name": "F"}}::vertex]                                                                                                                                                                 | [4, 6, 1, 3, 2, 3]        | 19
[{"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131972, "label": "Route", "properties": {"name": "D"}}::vertex, {"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131974, "label": "Route", "properties": {"name": "F"}}::vertex]                                                                                                                                                                 | [2, 1, 3, 4, 6, 3]        | 19
[{"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131972, "label": "Route", "properties": {"name": "D"}}::vertex, {"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131974, "label": "Route", "properties": {"name": "F"}}::vertex]                                                                                                                                                                                                                                                 | [4, 9, 3, 2, 3]           | 21
[{"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131973, "label": "Route", "properties": {"name": "E"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131974, "label": "Route", "properties": {"name": "F"}}::vertex]                                                                                                                                                                                                                                                 | [2, 8, 10, 6, 3]          | 29
[{"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131973, "label": "Route", "properties": {"name": "E"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131972, "label": "Route", "properties": {"name": "D"}}::vertex, {"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131974, "label": "Route", "properties": {"name": "F"}}::vertex] | [4, 6, 8, 10, 9, 3, 2, 3] | 45
[{"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131973, "label": "Route", "properties": {"name": "E"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131972, "label": "Route", "properties": {"name": "D"}}::vertex, {"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131974, "label": "Route", "properties": {"name": "F"}}::vertex] | [2, 8, 10, 9, 3, 4, 6, 3] | 45
[{"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131972, "label": "Route", "properties": {"name": "D"}}::vertex, {"id": 844424930131969, "label": "Route", "properties": {"name": "A"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131973, "label": "Route", "properties": {"name": "E"}}::vertex, {"id": 844424930131970, "label": "Route", "properties": {"name": "B"}}::vertex, {"id": 844424930131971, "label": "Route", "properties": {"name": "C"}}::vertex, {"id": 844424930131974, "label": "Route", "properties": {"name": "F"}}::vertex] | [4, 9, 3, 2, 8, 10, 6, 3] | 45
(9 rows)
(END)

我想在Cypher查询中进行一个子查询,以便仅打印nodes列中每个节点的名称,但不确定如何这样做。例如,我希望将输出表的第一行第一列改为{"A", "C", "F"}。我已经从Neo4j文档中发现了CALL {}条款,这似乎是我在这种情况下所寻找的;然而,当我在AGE中运行该子句时,它似乎没有被识别。

我的回答可能来得有点晚,但我希望它能有所帮助。AGE可能还不能识别CALL条款,但这里有一个您可以使用的解决方案。

SELECT * FROM cypher('Map', $$
MATCH paths = (a:Route {name: 'A'})-[:Connects *]->(b:Route {name: 'F'})
WITH paths, relationships(paths) AS rels
UNWIND rels AS rel
WITH nodes(paths) AS nodes,
collect(rel.time) AS routes,
sum(rel.time) AS travelTime
UNWIND nodes AS node
RETURN collect(properties(node).name), routes, travelTime
$$) AS (nodes agtype, routes agtype, travelTime agtype)
ORDER BY travelTime;

查询的结果应该返回以下输出:

nodes                     |          routes           | traveltime 
-----------------------------------------------+---------------------------+------------
["F", "C", "A"]                               | [2, 3]                    | 5
["A", "C", "B", "F"]                          | [4, 6, 3]                 | 13
["A", "F", "C", "B", "A", "D", "C"]           | [2, 1, 3, 4, 6, 3]        | 19
["A", "F", "C", "A", "D", "C", "B"]           | [4, 6, 1, 3, 2, 3]        | 19
["A", "C", "A", "D", "B", "F"]                | [4, 9, 3, 2, 3]           | 21
["F", "C", "B", "E", "C", "A"]                | [2, 8, 10, 6, 3]          | 29
["A", "D", "A", "C", "E", "B", "C", "F", "B"] | [4, 9, 3, 2, 8, 10, 6, 3] | 45
["F", "C", "E", "B", "D", "A", "C", "A", "B"] | [4, 6, 8, 10, 9, 3, 2, 3] | 45
["D", "A", "C", "E", "B", "A", "B", "C", "F"] | [2, 8, 10, 9, 3, 4, 6, 3] | 45
(9 rows)