NEO4j使用可选匹配重复返回

Tim*_*sen 1 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
Run Code Online (Sandbox Code Playgroud)

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

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

Fra*_*eau 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
Run Code Online (Sandbox Code Playgroud)