在Neo4j的,我创建了一个小图有4个节点,其中一些链接到其他一些:使用Neo4j的暗号找到哪些节点没有相互关联的
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中正确表达这一点。
我在回答之前错过了编辑,问题是如何针对所有节点对执行此操作? – jjaderberg