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。我如何才能改变它不相乘?
jmo0nnb31#
如果每个LIKED和DISLIKED关系的起始节点总是User,那么我们可以使用一个路径模式,使起始节点不特定。在这种情况下,获得计数的最有效方法如下(因为它导致Cypher规划器使用getDegree操作来计算关系,而不需要命中DB):
LIKED
DISLIKED
User
getDegree
OPTIONAL MATCH (u:User {username: $username}) RETURN SIZE([()-[:LIKED]->(u)|1]) AS count_l, SIZE([()-[:DISLIKED]->(u)|1]) AS count_d
对另一个问题的回答提供了更多详细信息。
1条答案
按热度按时间jmo0nnb31#
如果每个
LIKED
和DISLIKED
关系的起始节点总是User
,那么我们可以使用一个路径模式,使起始节点不特定。在这种情况下,获得计数的最有效方法如下(因为它导致Cypher规划器使用getDegree
操作来计算关系,而不需要命中DB):对另一个问题的回答提供了更多详细信息。