在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修复它,但是元素不能再添加两次到列表中。
有任何建议如何解决这个问题?
答案 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