如何收集可变长度关系的属性

时间:2019-06-02 09:35:22

标签: neo4j properties cypher graph-traversal

我可以从满足简单模式(长度为1)的所有关系中获取属性,例如:

MATCH ()-[r:RELATIONSHIP]->() RETURN collect(r.id)

但是无法获得可变长度关系的属性,例如:

MATCH ()-[r:RELATIONSHIP*]->() RETURN collect(r.id)

任何帮助将不胜感激。

  

错误消息是:Neo.ClientError.Statement.SyntaxError:类型   不匹配:预期的任何,地图,节点,关系,点,持续时间,   日期,时间,LocalTime,LocalDateTime或DateTime,但之前为   列表

1 个答案:

答案 0 :(得分:0)

在简单模式(固定长度1)中,变量r一种关系,但是在可变长度模式中,变量r关系列表

您的第一个查询是正确的,但是在第二个查询中,您尝试从List获取id属性,而不是从特定的relationship获取。

您可以修改查询以从列表中获取属性,如下所示:

MATCH ()-[r:RELATED_TO*2]->() 
UNWIND  r as rel
RETURN COLLECT(DISTINCT id(rel))

不推荐使用上述模式(不建议使用与可变长度模式中的列表的绑定关系),并将在以后的版本中将其删除。

推荐的方法是将整个路径绑定到变量,然后提取关系:

MATCH path=()-[:RELATED_TO*2]->()
UNWIND relationships(path) AS  rel
RETURN COLLECT(DISTINCT id(rel))