我有一个像附加图像的设置。 橙色节点表示个案,蓝色节点表示该案例中各种活动的表演者。
我想依次查询每个案例。在每种情况下,我都需要添加关系
[:RELATED {value: 1}]
从节点 i 到节点 k ,对于位于其间的所有k(ID下降的节点)在i和j之间)那些Performer节点(节点 i ,节点 j ),这样: />
名称(节点 i ) == 名称(节点 j )
和 | ID(节点 i ) - ID(节点 j )| > = 2
[示例和预期输出]:
在Case1中,由于ID为1且ID:4的Performer节点满足条件,因此在以下各项之间添加关系:
Node(ID:1) to Node(ID:2)
Node(ID:1) to Node(ID:3)
在Case2中,ID为2且ID:4的Performer节点满足条件,因此在以下各项之间添加关系:
Node(ID:2) to Node(ID:3)
在Case3中,有两组节点满足条件,
一个。对于节点(ID:1)和节点(ID:4),添加来自
的关系 Node(ID:1) to Node(ID:2)
Node(ID:1) to Node(ID:3)
湾对于节点(ID:3)和节点(ID:5),添加来自
的关系 Node(ID:3) to Node(ID:4)
在为上述案例制定CYPHER查询时需要提示。
提前致谢。
答案 0 :(得分:3)
正如问题评论中提到的,您的计算应该颠倒过来:
node j - node i >= 2
对于案例3,更多一点,按照您的解释,节点2和3之间应该存在第三种关系
这是我做的一个查询,您可以在这个neo4j控制台中测试它:http://console.neo4j.org/r/gpfesu
MATCH (n:Case)
MATCH path=(pe)<--(n)-->(pe2)
WHERE pe.name = pe2.name
AND pe2.id - pe.id >= 2
WITH path,n, (pe2.id - pe.id) as length
WITH range(head(nodes(path)).id+1, last(nodes(path)).id-1) as ids,
n,
head(nodes(path)).id as starter,
length
UNWIND ids as x
MATCH (perf:Performer {id:starter})<--(n)-->(perf2:Performer {id:x})
MERGE (perf)-[:RELATES_TO {value:1, length:length}]->(perf2)