在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”]。

我可以使用哪种过滤器功能来消除这种情况。谢谢你,

+0

你可以编辑你的问题,并把Cypher查询加载数据库? –

+0

我不知道如何使用Cypher创建这个数据库。但是这里是下载数据集(test.csv)文件的链接以生成该数据库:https://www.coursera.org/learn/big-data-graph-analytics/supplement/AjGE3/download-datasets-used-在此结果图的分析与 - Neo4j的。当我知道如何使用Cypher生成这个数据库时,我会更新我的文章。 – James

我相信这个查询应该工作:

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

+0

谢谢@布鲁诺。你的查询不会得到任何循环,因为在每个循环中,开始和结束节点将是相同的(在这种情况下:'A'节点)。 – James

+0

你好@詹姆斯,你是对的!我编辑我的答案,请现在试试! :) 谢谢! –

+0

是啊!有用。非常感谢你! – James