2017-09-02 13 views
0

のNeo4j /サイファー新しい、ここで私のクエリでのリスト上のサイファー集約:Neo4J |関係

MATCH (origin:BusStop)-[bus*]->(destination:BusStop) 
WITH bus 
WHERE origin.name =~ '(?i).*Origin.*' 
AND destination.name =~ '(?i).*Destination.*' 
AND all(rel in bus where rel.day in ['Sat']) 
RETURN bus 

私は出発地と目的地との間のすべての可能なバスを取得しようとしています。私はまた、上記のクエリで(合計関数として)合計運賃が欲しい。

注:関係には、fare SUM(bus.fare)というプロパティがあります。あなたはバスコレクション内の各関係から運賃値を抽出する必要がありますけれどもあなたは、コレクションの要素を合計することができAPOC Procedures

答えて

1

RETURN bus, apoc.coll.sum([rel in bus | rel.fare]) as totalFare 

APOC手続きがなければ、REDUCE使用する必要があります():

RETURN bus, reduce(total = 0, rel in bus | total + rel.fare) as totalFare 
+0

感謝。それは、そのルート上のすべてのバスを渡って私に合計運賃を与えます。私はバスごとに合計運賃が必要です。 – user1189332

+0

バスごとの合計運賃... rel.fareプロパティには正確に何が含まれていますか?なぜあなたは(あなたが主張するように)合計が必要なのでしょうか? –

+1

ルートの特定区間のバスを区別する方法がある場合は、その区別をするためにデータを指定する必要があります。 –

0

ここAPOCせずにそれを行うための方法です:

TESTDATA:

CREATE (o:BusStop {id: 1}) 
CREATE (i1:BusStop {id: 2}) 
CREATE (d:BusStop {id: 3}) 
CREATE (i2:BusStop {id: 4}) 
MERGE (o)-[:Bus {day: "Sat", fare: 10}]->(i1)-[:Bus {day: "Sat", fare: 15}]->(d) 
MERGE (o)-[:Bus {day: "Sun", fare: 5}]->(i1)-[:Bus {day: "Sun", fare: 15}]->(d) 
MERGE (o)-[:Bus {day: "Mon", fare: 20}]->(i1) 
MERGE (i1)-[:Bus {day: "Sat", fare: 5}]->(i2)-[:Bus {day: "Sat", fare: 9}]->(d); 

問合せ:

MATCH p=(o:BusStop)-[*]->(d:BusStop) 
WHERE o.id = 1 
    AND d.id = 3 
    AND ALL (rs in relationships(p) 
    WHERE rs.day in ['Sat']) 
WITH p, relationships(p) AS rels 
UNWIND rels AS rel 
RETURN DISTINCT p, sum(rel.fare) AS price; 

・ホープ、このことができます。

よろしく、 トム返信用