Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用条件边类型遍历neo4j图_Neo4j - Fatal编程技术网

用条件边类型遍历neo4j图

用条件边类型遍历neo4j图,neo4j,Neo4j,我有一个固定的数据库,其中的节点通过六种不同类型的关系连接人和边。为了简单起见,我在这篇文章中称之为关系A、B、C、D、E和F的类型。这些关系都不是方向性的。新的语法,所以谢谢你的帮助 我需要根据条件路径a到(B或C.D)到E到F来获取遍历图的关系集。这意味着我首先需要链接两个节点()-[:a]-()的关系,但是我不知道如何表示条件关系。为了到达下一个节点,我需要B或C,然后是D,这样它就是()-[:B]-()或()-[:C]-[:D]-()。如何用匹配语法表示这种条件遍历 尝试了所有这些,但出

我有一个固定的数据库,其中的节点通过六种不同类型的关系连接人和边。为了简单起见,我在这篇文章中称之为关系A、B、C、D、E和F的类型。这些关系都不是方向性的。新的语法,所以谢谢你的帮助

我需要根据条件路径a到(B或C.D)到E到F来获取遍历图的关系集。这意味着我首先需要链接两个节点()-[:a]-()的关系,但是我不知道如何表示条件关系。为了到达下一个节点,我需要B或C,然后是D,这样它就是()-[:B]-()或()-[:C]-[:D]-()。如何用匹配语法表示这种条件遍历

尝试了所有这些,但出现语法错误:

(node2:Node)-[rel2:B|rel3:C]-(node3:Node)
(node2:Node)-[rel2:B]OR[rel3:C]-(node3:Node)

当要穿越的跳数不同时,这并不能用Cypher真正表达出来

执行此操作的最简单方法可能是从APOC过程执行联合查询以覆盖两条路径,然后处理调用的结果:

//assume `node2` is in scope
CALL apoc.cypher.run("MATCH (node2)-[:B]-(node3:Node) RETURN node3
 UNION
 MATCH (node2)-[:C]-()-[:D]-(node3:Node) RETURN node3",
 {node2:node2}) YIELD value
WITH value.node3 as node3 // , <whatever else you want in scope>
...
//假设'node2'在范围内
调用apoc.cypher.run(“匹配(node2)-[:B](node3:Node)返回node3
联合
匹配(node2)-[:C]-()-[:D]-(node3:Node)返回node3“,
{node2:node2})屈服值
将value.node3作为node3/,
...

当要遍历的跳数不相同时,这并不能用Cypher真正表达出来

执行此操作的最简单方法可能是从APOC过程执行联合查询以覆盖两条路径,然后处理调用的结果:

//assume `node2` is in scope
CALL apoc.cypher.run("MATCH (node2)-[:B]-(node3:Node) RETURN node3
 UNION
 MATCH (node2)-[:C]-()-[:D]-(node3:Node) RETURN node3",
 {node2:node2}) YIELD value
WITH value.node3 as node3 // , <whatever else you want in scope>
...
//假设'node2'在范围内
调用apoc.cypher.run(“匹配(node2)-[:B](node3:Node)返回node3
联合
匹配(node2)-[:C]-()-[:D]-(node3:Node)返回node3“,
{node2:node2})屈服值
将value.node3作为node3/,
...

此纯密码查询应返回所有匹配路径:

MATCH p=()-[:A]-()-[r:B|C|D*1..2]-()-[:E]-()-[:F]-()
WHERE (SIZE(r) = 1 AND TYPE(r[0]) = 'B') OR
      (SIZE(r) = 2 AND TYPE(r[0]) = 'C' AND TYPE(r[1]) = 'D')
RETURN p

[r:B | C | D*1..2]
模式匹配类型为
B
C
和/或
D
(可以包括您不想要的子路径)的1或2个关系;
WHERE
子句过滤掉您不想要的子路径。

这个纯密码查询应该返回所有匹配路径:

MATCH p=()-[:A]-()-[r:B|C|D*1..2]-()-[:E]-()-[:F]-()
WHERE (SIZE(r) = 1 AND TYPE(r[0]) = 'B') OR
      (SIZE(r) = 2 AND TYPE(r[0]) = 'C' AND TYPE(r[1]) = 'D')
RETURN p
[r:B | C | D*1..2]
模式匹配类型为
B
C
和/或
D
(可以包括您不想要的子路径)的1或2个关系;
WHERE
子句过滤掉您不想要的子路径