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

时间:2015-07-01 11:03:07

标签: neo4j cypher

我需要一个密码查询来搜索这样的内容:

我有图(a) - [r] - >(b)和(a) - [r] - >(c)是a是人,b和c是2个不同的技能节点。 让我们假设我正在寻找知道java和fortran的人。 假设b具有属性名称:“java”并且c具有属性名称:“fortran”。 如何找到具有所有指定技能节点的人?

如果查询是可扩展的,那将是有用的,即如果我有20个技能节点,那么执行它也会很容易。

提前多多感谢!

1 个答案:

答案 0 :(得分:3)

一种方法是MATCH PersonSkill节点到Skill个节点,为您的属性过滤Person个节点,并计算每Person个节点的数量。如果它与您的过滤属性数组一样大,则Skills包含所有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 语句结合使用以返回数据:

// A declaration without any code. We force inline
__attribute__((always_inline)) void inline_func();