Neo4j查询关注关系时如何判断被关注用户是否回关
Neo4j 互关关系同步查询方案
场景1:查询指定两个用户的关注&回关状态
直接使用Cypher的EXISTS()函数做关系存在性判断,一次查询返回两个布尔结果:
// 替换为你的用户唯一标识属性,比如userId、openId等 MATCH (a:User {userId: '用户A的ID'}), (b:User {userId: '用户B的ID'}) RETURN EXISTS((a)-[:Follows]->(b)) AS isAFanOfB, // A是否是B的粉丝 EXISTS((b)-[:Follows]->(a)) AS isBFollowBack // B是否回关A
返回结果里两个字段都是布尔值,直接对应你需要的两个状态。
场景2:批量查询某用户的所有粉丝+对应回关状态
如果需要拉取B的全量粉丝列表,同时给每个粉丝标记是否被B回关,写法如下:
MATCH (fan:User)-[:Follows]->(b:User {userId: '用户B的ID'}) RETURN fan.userId AS fanUserId, fan.nickname AS fanNickname, EXISTS((b)-[:Follows]->(fan)) AS isFollowBack
这种写法的性能损耗极低,Neo4j对关系存在性判断做了原生优化,哪怕是十万级粉丝量的查询也不会有明显延迟。
优化建议:给
:User标签的唯一识别字段(比如userId)加上唯一索引,可以进一步缩短节点匹配的耗时。
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

