1

我是 Cypher 的新手,我想知道在 Neo4j Cypher 中是否可能出现以下情况:

公交路线示例

当我想查询从 1 号站到 4 号站应该乘坐什么巴士时,输出应该是(包括最少数量的换乘):

  1. 站 1 -> 路线 1 -> 站 3 -> 路线 3 -> 站 4
  2. 站 1 -> 路线 2 -> 站 3 -> 路线 3 -> 站 4

但并非所有可能的组合:

  1. 站 1 -> 路线 1 -> 站 2 -> 路线 1 -> 站 3 -> 路线 3 -> 站 4
  2. 站 1 -> 路线 1 -> 站 2 -> 路线 2 -> 站 3 -> 路线 3 -> 站 4
  3. 站 1 -> 路线 2 -> 站 2 -> 路线 1 -> 站 3 -> 路线 3 -> 站 4
  4. 站 1 -> 路线 2 -> 站 2 -> 路线 2 -> 站 3 -> 路线 3 -> 站 4

谢谢!

4

1 回答 1

3

如果没有条件表达式,这很困难(CASE/WHEN 现在在 2.0 中)。这与我在几分钟内的尝试一样接近。您必须从生成的关系集合中提取起始节点。

start st1=node:node_auto_index(name="station1"), st4=node:node_auto_index(name="station4") 
match p=st1-[r*]->st4 
with reduce(acc=[], route in rels(p): 
  case 
    when length(acc) > 0 and last(extract(a in acc: a.name)) = route.name then acc 
    else acc + route 
  end) as reducedRoutes 
return reducedRoutes, length(reducedRoutes) as len 
order by len;

http://console.neo4j.org/r/koe6fo

于 2013-05-23T00:54:50.050 回答