如何用单条Neo4j查询获取转发最获赞作者帖子的用户列表
解决Neo4j单查询获取转发最高获赞作者帖子的用户列表问题
错误原因
你用CALL子句报错的核心问题很明确:在CALL子查询里返回的personX是节点的属性值(字符串类型),但后续MATCH语句里你把它当成了Node类型来用,自然会触发类型不匹配错误。另外你原代码里还混用了FIO和name字段,这也可能导致额外问题。
正确的单查询写法
方式一:直接返回完整节点(推荐,更高效)
在CALL子查询里返回整个作者节点,后续直接用这个节点关联查询:
CALL { MATCH (per1:Person)-[r1:LIKE]->(p:Post)<-[:CREATE]-(per2:Person) RETURN per2, count(r1) as likeCount ORDER BY likeCount DESC LIMIT 1 } WITH per2 AS topAuthor MATCH (user:Person)-[:REPOST]->(post:Post)<-[:CREATE]-(topAuthor) RETURN DISTINCT user.name
方式二:通过属性匹配节点(适合必须传递属性的场景)
如果一定要在CALL里返回属性,后续需要用属性值匹配到对应的节点:
CALL { MATCH (per1:Person)-[r1:LIKE]->(p:Post)<-[:CREATE]-(per2:Person) RETURN per2.name AS topAuthorName, count(r1) as likeCount ORDER BY likeCount DESC LIMIT 1 } WITH topAuthorName MATCH (topAuthor:Person {name: topAuthorName})<-[:CREATE]-(post:Post)<-[:REPOST]-(user:Person) RETURN DISTINCT user.name
额外提醒
- 确保你的节点属性名统一,原查询里一会儿用
name一会儿用FIO,容易出问题,要保持一致。 - 方式一不需要二次匹配节点,性能比方式二更优,优先推荐。
内容的提问来源于stack exchange,提问作者Jackson
相关产品推荐
相关产品推荐

