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

Neo4j Cypher查询:如何获取二度好友共同选修的课程节点

解决方案

你需要的是所有二度好友选修课程的交集,可以通过统计好友总数、匹配每个课程的选修人数实现,正确Cypher查询如下:

MATCH (me:Person {uuid: '{my_id}'})-[:friendship*2]->(p:Person)
WHERE p.uuid <> '{my_id}'
WITH COLLECT(DISTINCT p) AS friend_list, COUNT(DISTINCT p) AS total_friends
UNWIND friend_list AS friend
MATCH (friend)-[:courses]->(c:Course)
WITH c, COUNT(DISTINCT friend) AS course_taker_num, total_friends
WHERE course_taker_num = total_friends
RETURN COLLECT(DISTINCT c) AS common_courses

逻辑说明

  • 首先筛选出所有排除自己的二度好友,去重后统计总人数
  • 展开好友列表匹配各自选修的课程
  • 按课程分组,统计选修该课程的好友数量
  • 仅保留选修人数等于好友总人数的课程,即为所有好友共同选修的课程

你之前编写的查询没有生效,是因为all条件仅校验了选课关系的起始节点属于好友列表,没有判断该课程被所有好友关联,因此无法过滤出交集内容。

内容的提问来源于stack exchange,提问作者Alex Sukachov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 01:09:03