在 Neo4J 中 "count" 操作后返回相同的路径
Returning same path after "count" operation in Neo4J
我有一个 Neo4j 数据库,其中包含人员、他们访问过的银行、他们进行的交易以及他们通过银行支付的业务。路径一般是这样的:
(:person)-[:VISITED]->(:bank)-[:MADE]->(:payment)-[:TO]->(:business)
我想找到同一个人通过不同银行向同一企业付款的所有路径。我不关心他们在每家银行进行了多少次不同的付款,我也不特别关注任何固定的个人或企业。我为此使用的密码语法如下:
MATCH (pe:person)-[:VISITED]->(ba:bank)-[:MADE]->(pa:payment)-[:TO]->(bu:business)
WHERE condition1
AND condition2
AND condition3
WITH pe, bu, COUNT(DISTINCT ba) as banks
WHERE banks > 1
MATCH p=(pe)-[:VISITED]->(:bank)-[:MADE]->(:payment)-[:TO]->(bu)
WHERE condition1
AND condition2
AND condition3
RETURN p
现在,您可能会意识到我实际上 运行 同一个查询在这里重复了两次。那是因为为了正确地执行我的 COUNT(DISTINCT ba),我必须“WITH pe, bu”,从而丢弃我事先进行的查询。因此,这使我的查询速度加倍且效率低下。
是否有比我的语法更优雅的替代方法来实现相同的结果?
未经测试,我认为这可以解决问题:
MATCH path=(pe:person)-[:VISITED]->(ba:bank)-[:MADE]->(pa:payment)-[:TO]->(bu:business)
WHERE condition1
AND condition2
AND condition3
WITH pe, bu, COLLECT(path) AS paths, COUNT(DISTINCT ba) as banks
WHERE banks > 1
UNWIND paths AS path
RETURN path
我有一个 Neo4j 数据库,其中包含人员、他们访问过的银行、他们进行的交易以及他们通过银行支付的业务。路径一般是这样的:
(:person)-[:VISITED]->(:bank)-[:MADE]->(:payment)-[:TO]->(:business)
我想找到同一个人通过不同银行向同一企业付款的所有路径。我不关心他们在每家银行进行了多少次不同的付款,我也不特别关注任何固定的个人或企业。我为此使用的密码语法如下:
MATCH (pe:person)-[:VISITED]->(ba:bank)-[:MADE]->(pa:payment)-[:TO]->(bu:business)
WHERE condition1
AND condition2
AND condition3
WITH pe, bu, COUNT(DISTINCT ba) as banks
WHERE banks > 1
MATCH p=(pe)-[:VISITED]->(:bank)-[:MADE]->(:payment)-[:TO]->(bu)
WHERE condition1
AND condition2
AND condition3
RETURN p
现在,您可能会意识到我实际上 运行 同一个查询在这里重复了两次。那是因为为了正确地执行我的 COUNT(DISTINCT ba),我必须“WITH pe, bu”,从而丢弃我事先进行的查询。因此,这使我的查询速度加倍且效率低下。
是否有比我的语法更优雅的替代方法来实现相同的结果?
未经测试,我认为这可以解决问题:
MATCH path=(pe:person)-[:VISITED]->(ba:bank)-[:MADE]->(pa:payment)-[:TO]->(bu:business)
WHERE condition1
AND condition2
AND condition3
WITH pe, bu, COLLECT(path) AS paths, COUNT(DISTINCT ba) as banks
WHERE banks > 1
UNWIND paths AS path
RETURN path