Neo4J:Return 只有候选人,不是所有的组合
Neo4J: Return only the candidates, not all the combinations
考虑以下形式的 Cypher 查询:
MATCH a-->b,a-->c,a-->d WHERE [some conditions on a, b, c and d] RETURN id(a),id(b),id(c),id(d)
上面的查询,大概如预期的那样,将return a, b, c, d 的所有候选节点的组合。因此,例如,如果 b 有三个候选者,c 有四个候选者,则查询的总行数 return 将是 3 x 4 = 12。如何调整它以便不同的匹配节点每个别名(a 到 d)只 returned 一次?
以下查询无效,但应该阐明我的想法:
MATCH a-->b,a-->c,a-->d WHERE [some conditions on a, b, c and d] RETURN distinct id(a), distinct id(b), distinct id(c), distinct id(d)
您可以使用不同的聚合。
MATCH a-->b,a-->c,a-->d
WHERE [some conditions on a, b, c and d]
RETURN collect(distinct id(a)) as ids_a,collect(distinct id(b)) as ids_b,
collect(distinct id(c)) as ids_c,collect(distinct id(d)) as ids_d;
考虑以下形式的 Cypher 查询:
MATCH a-->b,a-->c,a-->d WHERE [some conditions on a, b, c and d] RETURN id(a),id(b),id(c),id(d)
上面的查询,大概如预期的那样,将return a, b, c, d 的所有候选节点的组合。因此,例如,如果 b 有三个候选者,c 有四个候选者,则查询的总行数 return 将是 3 x 4 = 12。如何调整它以便不同的匹配节点每个别名(a 到 d)只 returned 一次?
以下查询无效,但应该阐明我的想法:
MATCH a-->b,a-->c,a-->d WHERE [some conditions on a, b, c and d] RETURN distinct id(a), distinct id(b), distinct id(c), distinct id(d)
您可以使用不同的聚合。
MATCH a-->b,a-->c,a-->d
WHERE [some conditions on a, b, c and d]
RETURN collect(distinct id(a)) as ids_a,collect(distinct id(b)) as ids_b,
collect(distinct id(c)) as ids_c,collect(distinct id(d)) as ids_d;