Neo4j 用于检查节点连接的密码查询

Neo4j 用于检查节点连接的密码查询,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我是neo4j的新手,非常感谢您的帮助 我在neo4j中创建了以下图形 n1---n2---n3---n4---n5 n1、n2、n3、n4、n5都是节点 ---:关系类型1(REL) 现在给定任意一组节点(以任意顺序),我想检查这些节点是否连接。 例如,给定n1、n2、n3==>已连接。 给定n1、n3、n2、n4、n5==>已连接 我应该如何制定密码查询以检查连接性 即使我更改了订单,以下查询仍有效 MATCH p=_1--_2--_3 WHERE _1.name?="Node1" and

我是neo4j的新手,非常感谢您的帮助

我在neo4j中创建了以下图形

n1---n2---n3---n4---n5

n1、n2、n3、n4、n5都是节点 ---:关系类型1(REL)

现在给定任意一组节点(以任意顺序),我想检查这些节点是否连接。 例如,给定n1、n2、n3==>已连接。 给定n1、n3、n2、n4、n5==>已连接

我应该如何制定密码查询以检查连接性

即使我更改了订单,以下查询仍有效

MATCH p=_1--_2--_3 
WHERE _1.name?="Node1" and ALL (n in nodes(p) 
  WHERE n.name IN ["Node1", "Node2", "Node4"]) 
RETURN nodes(p);

但是如果我提供开始节点而不是使用_1、_2并更改顺序,那么它不会返回路径(

对于以下查询

START p1=node(6),p2=node(5),p3=node(4) MATCH p=p1--p2--p3 
WHERE p1.name?="Node1" AND ALL (n IN nodes(p) WHERE n.name IN ['Node1' ,'Node3', 'Node2' , 'Node4']) 
RETURN nodes(p)
它不会返回路径,因为节点是按节点(6)-节点(5)-节点(4)顺序连接的。

案例1:

找到2条路径

MATCH p=_1--_2--_3--_4 
WHERE _1.name?="Node1" and 
  ALL (n in nodes(p) 
    WHERE n.name IN ["Node1", "Node2", "Node3", "Node4"]) 
RETURN nodes(p);
在这里查看:

在这种情况下,顺序无关紧要


案例2

(未找到路径)

使用节点1,2,4

MATCH p=_1--_2--_3 
WHERE _1.name?="Node1" and ALL (n in nodes(p) 
  WHERE n.name IN ["Node1", "Node2", "Node4"]) 
RETURN nodes(p);
在这里查看:

案例1:

找到2条路径

MATCH p=_1--_2--_3--_4 
WHERE _1.name?="Node1" and 
  ALL (n in nodes(p) 
    WHERE n.name IN ["Node1", "Node2", "Node3", "Node4"]) 
RETURN nodes(p);
在这里查看:

在这种情况下,顺序无关紧要


案例2

(未找到路径)

使用节点1,2,4

MATCH p=_1--_2--_3 
WHERE _1.name?="Node1" and ALL (n in nodes(p) 
  WHERE n.name IN ["Node1", "Node2", "Node4"]) 
RETURN nodes(p);
在这里查看:


您需要立即列出构成“连通性”的不同模式,如


您需要立即列出构成“连通性”的不同模式,如


节点是否必须直接连接或允许在两者之间连接(找到的路径可以大于设置的节点,例如n1、n3、n5->n1---n2---n3---n4---n5=已连接)?嗨,节点应直接连接。例如,给定的n1、n3、n5应导致==>未连接。节点是否必须直接连接,或者是允许连接的节点(找到的路径可以大于设置的节点,例如n1、n3、n5->n1---n2---n3---n4---n5=已连接)?嗨,节点应该直接连接。例如,给定的n1、n3、n5应该导致==>未连接。只是一个小的快速跟进问题。这些节点是否每次都按顺序返回?例如,匹配p=_1--_2--_3--_4其中_1.name?=“Node1”和所有(n在节点(p)中,其中n.name在[“Node1”、“Node2”、“Node3”、“Node4”])返回节点(p);返回[(6:Node{name:“Node1”}),(5:Node{name:“Node2”}),(4:Node{name:“Node3”}),(3:Node{name:“Node4”})它每次都会按照这个顺序返回节点吗?(按照连接的顺序)它们会按照
p
的顺序出现,所以根据路径每次都是一样的。太棒了!非常感谢!:-)您好,答案非常适合您提供的查询,但是对于相同的场景,如果我在START中指定了节点,并且如果我更改了连接顺序,那么它就不起作用。请指出我犯错误的地方。以下是查询。START p1=节点(6),p2=节点(5),p3=节点(4)匹配p=p1--p2--p3,其中p1.name?=“Node1”和所有(n在节点(p)中,其中n.name在['Node1','Node3','Node2','Node4']中)返回节点(p),p1返回路径,但如果我更改顺序,则开始p1=节点(6),p2=节点(4),p3=节点(5)不返回路径。只是一个小的快速跟进问题。这些节点是否每次都按顺序返回?例如,匹配p=_1--_2--_3--_4where _1.name?=“Node1”和ALL(n in nodes(p)WHERE n.name in[“Node1”,“Node2”,“Node3”,“Node4”])返回节点(p);返回[(6:Node{name:“Node1”},(5:Node{name:“Node2}),(4:Node{name:“Node3”},(3:Node{name:“Node4”})它每次都会按照这个顺序返回节点吗?(按照连接的顺序)它们会按照
p
的顺序来,所以每次根据路径都是一样的。太好了!非常感谢!:-)您好,答案非常适合您提供的查询,但是对于相同的场景,如果我在START中指定了节点,并且如果我更改了连接顺序,那么它就不起作用。请指出我犯错误的地方。以下是查询。START p1=节点(6),p2=节点(5),p3=节点(4)匹配p=p1--p2--p3,其中p1.name?=“Node1”和所有(n在节点(p)中,其中n.name在['Node1','Node3','Node2','Node4']中)返回节点(p),p1返回路径,但如果我更改顺序,则START p1=节点(6),p2=节点(4),p3=节点(5)不返回路径。