Neo4j Cypher query empty collect 使整个结果为空

Neo4j Cypher query empty collect makes the entire result empty

我一直面临着奇怪的问题,我试图从我拥有的 neo4j 图表中获取数据 built.Here 是我的查询

MATCH (u1:User {user_id: 4})-[:FOLLOWS]->(u2:User)-[]->(r1:Rest{city_id: 1})
WITH COLLECT ({ REST: r1.res_id}) as rows
MATCH (u1:User {user_id: 4})-[rel]->(r2:Rest{city_id: 1})
WHERE NOT (u1:User {user_id: 4})-[rel : BEEN_THERE | ADD_REVIEW]->(r2:Rest{city_id: 1})
WITH rows + COLLECT ({ REST: r2.res_id}) AS allrows
UNWIND allrows as row 
RETURN row.REST as RESTAURANT_ID, count(row.REST) as COUNT
ORDER BY COUNT desc
LIMIT 15;

然而,当 COLLECT ({ REST: r2.res_id}) 的结果为空时,整个结果变为空。此外,查询无法从第一个匹配项和 return undefined rows 中识别行。请告诉我。谢谢!

如果模式不匹配任何路径,结果确实为空。

您必须将 MATCH 分成 2 份并制作第二个 OPTIONAL,或者在您的实际情况下,停止一遍又一遍地匹配相同的 u1 节点:

MATCH (u1:User {user_id: 4})
OPTIONAL MATCH (u1)-[:FOLLOWS]->(:User)-->(r1:Rest {city_id: 1})
WITH u1, collect({ REST: r1.res_id }) AS rows
OPTIONAL MATCH (u1)-->(r2:Rest {city_id: 1})
WHERE NOT (u1)-[:BEEN_THERE | ADD_REVIEW]->(r2)
WITH rows + collect({ REST: r2.res_id }) AS allrows
UNWIND allrows as row 
RETURN row.REST AS RESTAURANT_ID, count(row.REST) AS COUNT
ORDER BY COUNT desc
LIMIT 15

我不确定你的情况下的第一个 OPTIONAL MATCH(你只提到第二个 collect 是一个障碍),但是如果你想要两种模式的聚合,每个模式都可以空着,给你。