使用Cypher从Neo4j图形数据库中的一系列节点获取完整路径
我正在存储一个节点序列,其中一个节点与序列中的前一个节点以及表示“对象”的另一个节点相关。例如,我可能有以下序列:使用Cypher从Neo4j图形数据库中的一系列节点获取完整路径,neo4j,cypher,Neo4j,Cypher,我正在存储一个节点序列,其中一个节点与序列中的前一个节点以及表示“对象”的另一个节点相关。例如,我可能有以下序列: (S1)<-[r]-(S2)<-[r]-(S3)<-[r]-(S4) 在此示例中,S1和S3都与O1相关 我想要实现的是将起点指定为“O1”,并能够获得上面示例中从S1到S4的完整路径 我能够通过在S1中添加一个名为“开始”的属性和在S4中添加另一个名为“结束”的属性来实现这一点,以表示序列的开始和结束,并使用此查询仅获取完整序列: MATCH (O:Obj{n
(S1)<-[r]-(S2)<-[r]-(S3)<-[r]-(S4)
在此示例中,S1和S3都与O1相关
我想要实现的是将起点指定为“O1”,并能够获得上面示例中从S1到S4的完整路径
我能够通过在S1中添加一个名为“开始”的属性和在S4中添加另一个名为“结束”的属性来实现这一点,以表示序列的开始和结束,并使用此查询仅获取完整序列:
MATCH (O:Obj{name:'O1'}),
path=(O)<-[:OBJECT]-(first:SEQ)<-[:PREV*]-(last:SEQ)
WHERE has(first.start)
AND has(last.end)
return path
MATCH(O:Obj{name:'O1'}),
路径=(O)是的,你可以。您只需要按大小按降序排列结果路径,并只返回最长的路径
match p=(:Obj {name:'O1'})<-[:REL]-(:SEQ)<-[:PREV*]-(:SEQ)
with p, size(nodes(p)) as seq_length
order by seq_length desc
limit 1
return tail(nodes(p))
match p=(:Obj{name:'O1'})可以。您只需要按大小按降序排列结果路径,并只返回最长的路径
match p=(:Obj {name:'O1'})<-[:REL]-(:SEQ)<-[:PREV*]-(:SEQ)
with p, size(nodes(p)) as seq_length
order by seq_length desc
limit 1
return tail(nodes(p))
match p=(:Obj{name:'O1'})您可以要求last
位于“链的末端”:
MATCH path=(:Obj{name:'O1'})您可以要求last
位于“链的末端”:
MATCH path=(:Obj{name:'O1'})这只在我有一个序列的情况下有效,但在我的图形中,我有很多序列,我希望能够根据某些条件获得所有序列。这只在我有一个序列的情况下有效,但在我的图中,我有许多序列,我希望能够根据某些条件得到所有序列。这就是我所需要的!当序列中的一个节点与第一个节点匹配时,我只需要做一个小的修改就可以过滤掉。因此,我的结论是:MATCH path=(O:Obj{name:'O1'})请记住最适合您的答案。这就是我需要的!当序列中的一个节点与第一个节点匹配时,我只需要做一个小的修改就可以过滤掉。因此,我的结论是:MATCH path=(O:Obj{name:'O1'})请记住最适合您的答案。
match p=(:Obj {name:'O1'})<-[:REL]-(:SEQ)<-[:PREV*]-(:SEQ)
with p, size(nodes(p)) as seq_length
order by seq_length desc
limit 1
return tail(nodes(p))
MATCH path=(:Obj {name:'O1'})<-[:OBJECT]-(:SEQ)<-[:PREV*]-(last:SEQ)
WHERE NOT (last)<-[:PREV]-(:SEQ)
RETURN path