所以我有一个图形数据库,如下所示:
关于它的唯一真正有趣的事情是SomeProperty
可以是'是'或'否'。
在顶行中,3个节点中的1个对此属性具有“是”。
在底行,此属性的所有3个节点都为“是”。
如何通过提出问题来编写仅返回底行的Cypher查询:哪个子图具有2个或更多SomeProperty
='是'的值?
这是我的代码:
CREATE (person:Person {gender: 'Male', name: 'Albert', SomeProperty: 'Yes'})
CREATE (person:Person {gender: 'Female', name: 'Annie', SomeProperty: 'Yes'})
CREATE (person:Person {gender: 'Female', name: 'Adrian', SomeProperty: 'No'})
MATCH (a1:Person),(a2:Person)
WHERE a1.name = 'Albert' AND a2.name = 'Annie'
CREATE (a1)-[r:RELATED_TO]->(a2)
SET r.relationship='related'
MATCH (a1:Person),(a2:Person)
WHERE a1.name = 'Annie' AND a2.name = 'Adrian'
CREATE (a1)-[r:RELATED_TO]->(a2)
SET r.relationship='related'
CREATE (person:Person {gender: 'Male', name: 'Bill', SomeProperty: 'Yes'})
CREATE (person:Person {gender: 'Female', name: 'Barb', SomeProperty: 'Yes'})
CREATE (person:Person {gender: 'Male', name: 'Barry', SomeProperty: 'Yes'})
MATCH (a1:Person),(a2:Person)
WHERE a1.name = 'Bill' AND a2.name = 'Barb'
CREATE (a1)-[r:RELATED_TO]->(a2)
SET r.relationship='related'
MATCH (a1:Person),(a2:Person)
WHERE a1.name = 'Barb' AND a2.name = 'Barry'
CREATE (a1)-[r:RELATED_TO]->(a2)
SET r.relationship='related'
答案 0 :(得分:1)
要返回超过2'是'的所有路径节点:
MATCH p=(:Person)-[:RELATED_TO*]->(:Person)
WHERE 2 < REDUCE(s = 0, x IN NODES(p) | CASE WHEN x. SomeProperty = 'Yes' THEN s + 1 ELSE s END)
RETURN p;
REDUCE
函数用于计算SomeProperty
值为&#39;是&#39;的节点数。
答案 1 :(得分:0)
我觉得我有点困惑,因为我不知道连锁可以多久,如果它总是只有三个那么我想这样的东西可能会让它们回归
MATCH (p1)-[r1]-(p2)-[r2]-(p3)
WHERE (a1.SomeProperty ='Yes' AND a2.SomeProperty ='Yes')
OR (a1.SomeProperty ='Yes' AND a3.SomeProperty ='Yes')
RETURN a1,a2,a3
如果它可以更长,那么可能开始找到2个节点
MATCH (a1)-[..]-(a2)
WHERE (a1.SomeProperty ='Yes' AND a2.SomeProperty ='Yes')
RETURN a1,a2
然后从这些节点开始提取子图:Extract subgraph in neo4j
当然,我没有玩过Neo4J,所以我相信有人会流行并提供更好的提示