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

编写Neo4j查询:获取Aviv既看又喜欢且被1-3级好友关注的影片

完成你的Neo4j Cypher查询需求

嗨,我来帮你把这个Cypher查询补全并优化,刚好能满足你提出的两个条件。先直接给你完整的查询代码,再一步步解释每部分的作用:

MATCH (aviv:Person {name:'Aviv'})-[:friend*1..3]->(f:Person) 
WHERE f <> aviv  // 排除Aviv自己,避免循环统计
WITH aviv, collect(DISTINCT f) AS friends  // 去重好友,确保统计准确

// 筛选Aviv同时标记为watched和liked的电影(满足条件1)
MATCH (aviv)-[:watched]->(m:Movie), (aviv)-[:liked]->(m)

// 统计这些电影被多少1-3级好友执行过watched或liked操作
MATCH (f)-[:watched|liked]->(m)
WHERE f IN friends
WITH m, count(DISTINCT f) AS friendInteractionCount

// 筛选出至少有两位好友操作过的电影(满足条件2)
WHERE friendInteractionCount >= 2
RETURN m.title, friendInteractionCount  // 可根据需求调整返回字段,比如返回整个m节点

代码分步解释

  • 获取Aviv的1-3级好友
    我们先精准匹配Person节点中名为Aviv的用户,再找到他的1-3级好友。用f <> aviv避免把Aviv自己纳入统计,同时collect(DISTINCT f)对好友去重——因为同一个好友可能通过不同的好友链被多次匹配,去重后能保证后续统计的准确性。

  • 筛选Aviv同时标记的电影
    通过同时匹配watched和liked两条关系,确保只保留Aviv既看过又喜欢的电影,完美满足你的第一个条件。

  • 统计好友的操作次数
    匹配好友与目标电影之间的watched或liked关系,用count(DISTINCT f)统计不同好友的数量,避免同一个好友多次操作被重复计数。

  • 最终筛选并返回结果
    用WHERE friendInteractionCount >= 2筛选出符合第二个条件的电影,最后返回电影标题和对应的好友操作数(你也可以直接返回m获取整个电影节点的所有属性)。

补充说明:你的数据库结构为:

  • Person节点:包含name属性,节点间存在friend(好友)关系
  • Movie节点:包含影片相关属性(如title),与Person节点间存在watched(观看)或liked(喜欢)关系

内容的提问来源于stack exchange,提问作者YUVAL MIZRAHI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:30:38