2

このような暗号クエリがあります。

START dep=node:cities(city_code = "JGS"), 
arr=node:cities(city_code = "XMN") 

MATCH dep-[way:BRANCH2BRANCH_AIRWAY*0..1]->()-->arr

RETURN length(way), transfer.city_code,
extract(w in way: w.min_consume_time) AS consumeTime

「way」という名前の関係はオプションの関係であるため、「way」という関係が存在しない場合、「consumeTime」という名前のプロパティは空のリストになります。

クエリ結果は次のとおりです。

| | 0 | "JGS" | [] |
| | 1 | "SZX" | [3600] |

プロパティ "consumeTime" で head 関数を使用したい場合、"Invalid query: head of empty list" というエラーが返されます。

どうすればこのような結果を得ることができますか?

| | 0 | "JGS" | null | null |
| | 1 | "SZX" | 3600 |

4

1 に答える 1

1

これは、Cypher に追加することが重要であると私が考える条件式では些細なことです: https://github.com/neo4j/community/issues/899

reduceこれは、1.9-SNAPSHOT を必要とするややハックなクエリです。

START dep=node:cities(city_code = "JGS"), 
      arr=node:cities(city_code = "XMN") 
MATCH dep-[way:BRANCH2BRANCH_AIRWAY*0..1]->()-->arr
WITH  length(way) as wayLength, 
      transfer.city_code as transferCityCode,
      extract(w in way: w.min_consume_time) AS consumeTime
WITH  wayLength,
      transferCityCode,
      consumeTime,
      // reverse the consumeTime list, so that we can get the head from the end
      reduce(acc=[], x in consumeTime: x + acc) reverseConsumeTime
RETURN wayLength,
       transferCityCode,
       consumeTime,
       // return null if empty, else the end of the list
       reduce(acc=null, x in reverseConsumeTime: x) as headOrNull;

reverse(coll)このクエリは、次の構文を使用してコレクションを逆にするか、空のリストをチェックする条件式を使用してかなり改善できます 。

于 2012-10-23T16:39:22.193 に答える