Neo4j Cypher-查找其相关节点的属性包含在集合中的节点

Neo4j Cypher-查找其相关节点的属性包含在集合中的节点,neo4j,cypher,Neo4j,Cypher,我需要一个密码查询来搜索如下内容: 我有一个图(a)-[r]->(b)和(a)-[r]->(c)是一个人,b和c是两个不同的技能节点。 让我们假设我正在寻找既懂java又懂fortran的人。 假设b的属性名为“java”,c的属性名为“fortran”。 如何找到拥有所有指定技能节点的人员 如果查询是可伸缩的,也就是说,如果我有20个技能节点,那么执行它也很容易 提前多谢 一种方法是将您的人员节点与技能节点进行匹配,过滤技能节点以获取您的属性,并计算每个人员的节点数。如果它与您筛选的属性数组一

我需要一个密码查询来搜索如下内容:

我有一个图(a)-[r]->(b)和(a)-[r]->(c)是一个人,b和c是两个不同的技能节点。 让我们假设我正在寻找既懂java又懂fortran的人。 假设b的属性名为“java”,c的属性名为“fortran”。 如何找到拥有所有指定技能节点的人员

如果查询是可伸缩的,也就是说,如果我有20个技能节点,那么执行它也很容易


提前多谢

一种方法是将
您的
人员
节点与
技能
节点进行匹配,过滤
技能
节点以获取您的属性,并计算每个
人员
的节点数。如果它与您筛选的属性数组一样大,则
人员
拥有所有
技能

MATCH (p:Person)-[r:HAS]->(s:Skill)
WHERE s.name IN ['java', 'fortran', 'cypher']
RETURN DISTINCT p, count(s)
我认为您可以将其与
CASE
语句结合起来返回数据:

MATCH (p:Person)-[r:HAS]->(s:Skill)
WHERE s.name IN ['java', 'fortran', 'cypher']
RETURN
CASE
WHEN count(s) = 3
THEN p
ELSE 0
END