我正在实现一个类似于Neo4j图中的链表结构的东西。图形是通过执行许多类似于以下内容的语句创建的:
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关系到达节点为止。
即:
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关系
如何修改上面的查询,以便返回的每条记录都包含路径上的一个节点,以及其中所有传出关系(包括NEXT和BRANCH)的列表?
注意,我不想遍历这个查询中的BRANCH边,我只想让它告诉我它们在那里。
(PS我正在Java中实现这个策略,但到目前为止,我更喜欢直接执行Cypher查询,而不是使用遍历API。如果我这样做会给自己带来更多困难,请提请我注意)。
发布于 2014-01-25 01:56:21
您可以在任何时候返回路径表达式。
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]->()返回一个路径集合,所以如果您只想访问您必须执行的关系
[p in x-[:BRANCH]->() | head(rels(p)) ]关于如何将活动流实现为非托管扩展的示例,可以查看以下内容:https://github.com/jexp/neo4j-activity-stream
https://stackoverflow.com/questions/21199936
复制相似问题