You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单条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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:33:35