【发布时间】:2015-08-28 14:47:20
【问题描述】:
在 Neo4j 中,我创建了一个包含 4 个节点的小图,其中一些节点与其他节点相连:
CREATE
(a:Room {name:"A"})
-[:DOOR]->
(b:Room {name:"B"})
-[:DOOR]->
(c:Room {name:"C"})
-[:DOOR]->
(d:Room {name:"D"}),
a-[:DOOR]->c,
a-[:DOOR]->d,
b-[:DOOR]->a
RETURN a,b,c,d
我想找出哪些房间没有在它们之间有门。我希望有这样的输出:
{"B": ["D"], "C": ["A", "B"], "D": ["A", "B", "C"]}
我可以针对一个给定的起点做到这一点...
MATCH (b), (r)
WHERE b.name = "B"
AND NOT (b)-[:DOOR]->(r)
AND b <> r
RETURN r
// Returns Room D
这是我的货物崇拜伪代码,用于遍历每对可能的节点:
MATCH rooms = (r)
SET output = {}
FOREACH (
room IN nodes(rooms),
exit IN nodes(rooms),
missing = [],
output[room.name] = missing
|
IF room <> exit AND NOT room-[:DOOR]->(exit)
THEN missing = missing + exit
)
RETURN output
请帮助我了解如何在 Cypher 中正确表述这一点。
【问题讨论】:
-
我在回答之前错过了您的编辑,问题是如何为所有节点对执行此操作?