首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cypher遍历

Cypher遍历
EN

Stack Overflow用户
提问于 2014-01-18 04:18:06
回答 1查看 282关注 0票数 0

我正在实现一个类似于Neo4j图中的链表结构的东西。图形是通过执行许多类似于以下内容的语句创建的:

代码语言:javascript
复制
CREATE (R1:root{edgeId:2})-[:HEAD]->
        (:node{text: 'edge 2 head text', width:300})-[:NEXT{edge:2, hard:true}]-> 
        (:node{text: 'edge 2 point 0'})-[:NEXT{edge:2}]->
        (n0:node{text: 'edge 2 point 1'}),
        (n0)-[:BRANCH]->(:root{edgeId:3}),
        (n0)-[:NEXT{edge:2}]->
        (:node{text: 'edge 2 point 2'})-[:NEXT{edge:2}]->
        (:node{text: 'edge 2 point 3'})<-[:TAIL{edge:2}]->(R1)

遍历边缘意味着从根节点开始,遵循根节点的传出HEAD关系到第一个节点,并遵循NEXT关系链,直到从根开始使用传入的TAIL关系到达节点为止。

即:

代码语言:javascript
复制
MATCH path = (root:root:main)-[:HEAD]->(a:point)-[n:NEXT*]->(z:point)<-[:TAIL]-(root) 
RETURN nodes(path), n

每个节点都有一个传出的NEXT关系,但是一些节点也有BRANCH关系,这指向其他边缘的根节点。

在上面的查询中,nodes(path)显然返回沿边缘的所有节点,n列出了沿边缘的每个节点的传出NEXT关系。如何修改此查询,以便除传出NEXT关系外,它还返回任何传出BRANCH关系

如何修改上面的查询,以便返回的每条记录都包含路径上的一个节点,以及其中所有传出关系(包括NEXTBRANCH)的列表?

注意,我不想遍历这个查询中的BRANCH边,我只想让它告诉我它们在那里。

(PS我正在Java中实现这个策略,但到目前为止,我更喜欢直接执行Cypher查询,而不是使用遍历API。如果我这样做会给自己带来更多困难,请提请我注意)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-25 01:56:21

您可以在任何时候返回路径表达式。

代码语言:javascript
复制
MATCH path = (root:root:main)-[:HEAD]->(a:point)-[n:NEXT*]->(z:point)<-[:TAIL]-(root) 
RETURN extract(x in nodes(path) | [x, x-[:BRANCH]->()]), n

这个x-[:BRANCH]->()返回一个路径集合,所以如果您只想访问您必须执行的关系

代码语言:javascript
复制
[p in x-[:BRANCH]->() | head(rels(p)) ]

关于如何将活动流实现为非托管扩展的示例,可以查看以下内容:https://github.com/jexp/neo4j-activity-stream

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21199936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档