neo4j 如何使两个Cypher可选匹配不相乘结果?

dojqjjoe  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(93)
OPTIONAL MATCH (:User)-[l:LIKED]->(:User {username: $username})
OPTIONAL MATCH (:User)-[d:DISLIKED]->(:User {username: $username})
RETURN count(l),count(d)

我有这个Cypher查询返回2种类型的关系的计数。目前有7:LIKED边缘和5:DISLIKED边缘运行到给定的用户名,但当我运行这个,我得到两个计数为35。我如何才能改变它不相乘?

jmo0nnb3

jmo0nnb31#

如果每个LIKEDDISLIKED关系的起始节点总是User,那么我们可以使用一个路径模式,使起始节点不特定。在这种情况下,获得计数的最有效方法如下(因为它导致Cypher规划器使用getDegree操作来计算关系,而不需要命中DB):

OPTIONAL MATCH (u:User {username: $username})
RETURN
  SIZE([()-[:LIKED]->(u)|1]) AS count_l,
  SIZE([()-[:DISLIKED]->(u)|1]) AS count_d

对另一个问题的回答提供了更多详细信息。

相关问题