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 に答える