似乎无法弄清楚,我不确定它是否完全可能。我有一个像这样的图表
a-[:granted]->b-[:granted]->...x-[granted_source]>s
其中b和x是感兴趣的。虽然我已经知道了a和s,它们是在START子句中定义的终点。
请注意,b和c可以是一个( a->b->s )
或多于一个( a->b->c->x->s )
,目标是找到最短路径,仅返回“已授予”关系所指向的节点。 / p>
我最接近的是:
start s=node(21), p=node(2)
match paths=shortestPath(p-[:granted|granted_source*]->s)
return NODES(paths)
它给出了所有节点,包括start(p)和end(s)。但是我似乎无法过滤掉,或者更好的是根本不返回它们,只有被授予关系指向的节点以及(s)可能的顺序。我在Neo4j 2.0b上,我想知道标签,我没有问题,是不是更好的方式去?任何帮助将非常感激。
答案 0 :(得分:4)
那么,你想要从一组节点中砍掉头尾? (我明白了吗?)怎么样:
start s=node(21), p=node(2)
match paths=shortestPath(p-[:granted|granted_source*]->s)
return NODES(paths)[1..-1]
答案 1 :(得分:1)
我认为我使用WITH解决了它,我认为这可能是最好的性能,首先获取p -...然后获取所有...->然后使用shortestPath()用于获取'中间'节点。结果看似正确。
start s=node(21), p=node(2)
match p-[:granted]-x, y-[:granted_source]->s
with x, y
match paths=shortestPath(x-[:granted*]->y)
return NODES(paths)