从教程:
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name="Keanu Reeves" and kevin.name = "Kevin Bacon"
RETURN length(p)
想象一下,每个Person节点都有一个age属性和一个职业。每个KNOWS边缘都有length of acquaintance
属性。
Cypher查询将返回最短路径,例如
age > 40 years
not (occupation = ACTOR)
lengthOfAcquaintance > 10 years
在分子生物学相互作用数据中,我们希望制作更复杂的查询 - 可能是cypher处理得很好的那种,但是我怎么会这样。例如:
找出受体分子A和转录因子B之间的最短路径,其中大多数边缘来自小规模实验,大多数基因注释为激酶,边缘的证据(权重)为greater than 0.5
< / p>
这些查询可能会出现在很多设置中。任何人都可以指出我的阅读和例子,这将有助于我理解这是如何做到的?并且可能提供&#34;培根数量的适度扩展&#34;容纳一个节点和一个边缘属性的查询?
谢谢!
答案 0 :(得分:2)
我认为您所寻找的是ALL predicate。
以下是使用它的几个例子:
ShortestPath,路径中的所有actor都应该有age > 40
:
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name = "Keanu Reeves"
AND kevin.name = "Kevin Bacon"
AND ALL(x IN nodes(p) WHERE x.age > 40)
RETURN p
ShortestPath,其中所有边都应该有lengthOfAcquaintance > 10
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name = "Keanu Reeves"
AND kevin.name = "Kevin Bacon"
AND ALL(x in rels(p) WHERE x.lengthOfAcquaintance > 100
RETURN p
当然,你可以将两者结合起来:
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name = "Keanu Reeves"
AND kevin.name = "Kevin Bacon"
AND ALL(x in rels(p) WHERE x.lengthOfAcquaintance > 10)
AND ALL(x in nodes(p) WHERE x.age > 40)
RETURN p