用Cypher查询Neo4j中的递归关系链
我有一个图形数据库,它正在为消息的元数据以及这些消息中可以包含的字段建模。其中一些字段可以是“组”,也就是其他字段的组。我想问Neo的是“有什么消息在使用这个组?”。以下是可用于从邮件获取到组的路径类型列表:用Cypher查询Neo4j中的递归关系链,neo4j,cypher,relationships,Neo4j,Cypher,Relationships,我有一个图形数据库,它正在为消息的元数据以及这些消息中可以包含的字段建模。其中一些字段可以是“组”,也就是其他字段的组。我想问Neo的是“有什么消息在使用这个组?”。以下是可用于从邮件获取到组的路径类型列表: message-[:INLINE]->group (the fields of a group are used inline on a message) message-[:FIELDREF]->(fref)-[:FIELD]->(field)-[:DATATYPE]
message-[:INLINE]->group (the fields of a group are used inline on a message)
message-[:FIELDREF]->(fref)-[:FIELD]->(field)-[:DATATYPE]->group (the group is used as a data type by a field on the message)
第二个链是递归的。换句话说,-[:FIELDREF]->(fref)-[:FIELD]->(FIELD)-[:DATATYPE]-(group)段可以在最终到达我感兴趣的组之前反复出现
所以,我想知道的是,我如何在路径中的每个元素上请求一个重复的关系链,而不仅仅是一个倍数(例如关系名称后面的*)
综上所述,您可以通过遍历[:INLINE]关系从消息中访问组,该关系可以跟随n个“fieldref field datatype group”链。。或者,您可以通过遍历n个“fieldref field datatype group”链从消息中访问组
所以我想要类似于[?:INLINE]>0..n的(fieldref-field-datatype-group)链
有什么想法吗?根据密码参考 12.2.13。可变长度关系 是数量可变的关系的节点→可以使用以下语法找到节点跳转:-[:TYPE*minHops..maxHops]->。最小跳数和最大跳数是可选的,默认分别为1和无穷大。当没有给出边界时,可以省略点 下面是我认为你寻求的一个例子。我把最低限度定为2
start n=node:node_auto_index(name='Neo') match n-[r:KNOWS*2..]-m return n as Neo,r,m
您可以在上逐字测试此查询是的,我知道星号。实际上,当我告诉Neo我想要“从一条消息到一个组的任何长度的任何路径”时,我试图过于复杂,描述一个精确的形状,就像这样:msg-[?:INLINE | FIELDREF | FIELD | DATATYPE*]->n
start n=node:node_auto_index(name='Neo') match n-[r:KNOWS*2..]-m return n as Neo,r,m