在neo4j中获得具有约束的连接节点的正确代码是什么?

时间:2018-08-30 09:50:39

标签: neo4j

我正在尝试获取连接节点。最终节点应具有pobj的类型。如何用最短路径指定它?

match(c:fdnode{name:'flights'}) 
match(d:fdnode) 
match p = shortestPath((c)-[*..15]-(e)-[r]-(d)) 
where d.name = '700' and type(r) = 'pobj' 
RETURN nodes(p)

如果我删除r,代码将返回所需的输出。但是我需要类型(r)。

pobj仅适用于这种情况。我有多个遍历条件。

2 个答案:

答案 0 :(得分:0)

以下查询可能会做您想要的。它返回满足以下条件的最短无向路径(最大长度为15)中的节点:

  • 第一个节点的标签为'fdnode',其name值为'flights'。
  • 最后一个节点的标签为'fdnode',其name值为'700'。
  • 最后一个关系的类型为pobj

    MATCH p = shortestPath((c:fdnode)-[*..15]-(d:fdnode)) 
    WHERE c.name = 'flights' AND d.name = '700' AND TYPE(LAST(RELATIONSHIPS(p))) = 'pobj'
    RETURN NODES(p);
    

注意:匹配的路径将是“无向的”,因为此查询通过未在MATCH模式中指定任何方向性来模仿您的查询。因此,每个匹配的关系都可以在任一方向上进行。如果这不是您想要的,则需要在模式中明确指定方向性。

答案 1 :(得分:0)

弄清楚了。这行得通。

match (a:iknode)-[*..10]->(b:iknode)-[r]->(c:iknode) where type(r) =  'pobj' and a.name = 'flights' return c

这也有效:

MATCH p = ((c:fdnode)-[*..4]->(d:fdnode)) 
WHERE c.name = 'flights'  AND TYPE(LAST(RELATIONSHIPS(p))) = 'pobj'
RETURN NODES(p) order by length(p) ;