在Neo4j中找到循环
问题描述:
我在关注此课程Graph Analytics With Neo4j以探索Neo4j数据库。数据库非常简单,包含11个节点('A','B','C'...),14个关系。我想查找这个Neo4j数据库中的所有循环。我用下面的查询来查找包含'A'的循环。在Neo4j中找到循环
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()和FILTER()功能,保证只有无需反复节点的路径将被匹配。
立足于此SO answer。
你可以编辑你的问题,并把Cypher查询加载数据库? –
我不知道如何使用Cypher创建这个数据库。但是这里是下载数据集(test.csv)文件的链接以生成该数据库:https://www.coursera.org/learn/big-data-graph-analytics/supplement/AjGE3/download-datasets-used-在此结果图的分析与 - Neo4j的。当我知道如何使用Cypher生成这个数据库时,我会更新我的文章。 – James