在 Neo4j 中查找循环
find loops in Neo4j
我正在学习本课程 Graph Analytics With Neo4j 以探索 Neo4j 数据库。数据库很简单,包含11个节点('A'、'B'、'C'...),14个关系。我想在此 Neo4j 数据库中找到所有循环。我使用以下查询来查找包含 'A'.
的循环
match p=(n)-[*]-(m)
where n.Name = ['A'] and m.Name = ['A']
return EXTRACT(n IN NODES(p)| n.Name) AS Paths, length(p)
order by length(p)
问题在于,在上述查询生成的几个循环中,某些节点被访问了两次,例如以下循环中的'C':["A","C", "D"、"B"、"C"、"J"、"F"、"A"]。
我可以使用哪个过滤器功能来消除这种情况。谢谢,
我相信这个查询应该有效:
MATCH p=(n)-[*]-(m)
WHERE n.Name = ['A'] and m.Name = ['A']
AND NONE (node IN NODES(p) WHERE SIZE(
FILTER(x IN NODES(p) WHERE node = x AND x.name <> 'A')
) > 1
)
RETURN EXTRACT(n IN NODES(p)| n.Name) AS Paths, length(p)
order by length(p)
即:查询使用NONE(), SIZE() and FILTER()函数保证只匹配没有重复节点的路径。
基于此。
我正在学习本课程 Graph Analytics With Neo4j 以探索 Neo4j 数据库。数据库很简单,包含11个节点('A'、'B'、'C'...),14个关系。我想在此 Neo4j 数据库中找到所有循环。我使用以下查询来查找包含 'A'.
的循环match p=(n)-[*]-(m)
where n.Name = ['A'] and m.Name = ['A']
return EXTRACT(n IN NODES(p)| n.Name) AS Paths, length(p)
order by length(p)
问题在于,在上述查询生成的几个循环中,某些节点被访问了两次,例如以下循环中的'C':["A","C", "D"、"B"、"C"、"J"、"F"、"A"]。
我可以使用哪个过滤器功能来消除这种情况。谢谢,
我相信这个查询应该有效:
MATCH p=(n)-[*]-(m)
WHERE n.Name = ['A'] and m.Name = ['A']
AND NONE (node IN NODES(p) WHERE SIZE(
FILTER(x IN NODES(p) WHERE node = x AND x.name <> 'A')
) > 1
)
RETURN EXTRACT(n IN NODES(p)| n.Name) AS Paths, length(p)
order by length(p)
即:查询使用NONE(), SIZE() and FILTER()函数保证只匹配没有重复节点的路径。
基于此