我得到了这个Cypher查询:
match (c:Person)
match (c)-[:eml]->(emls:Email)
match (c)-[:phn]->(phns:Phone)
return phns.Number, emls.Value
Email
个节点数为13,Phone
个节点为10。
当我返回节点时,结果是:13 Email
个节点和10个Phone
节点
但是当我返回一个属性时,让我们说:phones.Number
,我得到130个重复的结果(数字来自13 * 10)。
答案 0 :(得分:4)
每次通过匹配新模式展开结果图时,都会使用新结果执行先前结果的笛卡尔积:
您需要在每个步骤收集以避免产品:每人保留1行结果,或者1个(人,电子邮件,电话)元组,其中电子邮件和电话都是集合。
MATCH (c:Person)
OPTIONAL MATCH (c)-[:eml]->(emls:Email)
WITH c, collect(emls.Value) AS emails
OPTIONAL MATCH (c)-[:phn]->(phns:Phone)
RETURN c, emails, collect(phns.Number) AS phones