NEO4j使用可选匹配重复返回

时间:2016-09-02 09:29:52

标签: neo4j cypher

在cypher查询中,我们想要从用户那里获取各种数据。此时,我们使用可选匹配来获取用户的关系。

MATCH (person:Person { Id : xxxx })
OPTIONAL MATCH (person)-[:NEXT*]->(element)
OPTIONAL MATCH (person)-[:WROTE_COMMENT]->(comment)
RETURN person, collect(element) as element, collect(comment) as comment

问题是此查询返回找到的每个注释的所有重复元素。我们可以使用distinct修复它,但是元素不能再添加两次到列表中。

有任何建议如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

使用WITH将查询拆分为两个步骤,以避免在两个列表之间执行笛卡尔积:

MATCH (person:Person { Id : xxxx })
OPTIONAL MATCH (person)-[:NEXT*]->(element)
WITH person, collect(element) AS element
OPTIONAL MATCH (person)-[:WROTE_COMMENT]->(comment)
RETURN person, element, collect(comment) as comment