2017-09-02 79 views
0

新來的Neo4j/Cypher和這裏的列表是我的查詢:Neo4J | Cypher支架聚集在關係

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 

我試圖得到始發地和目的地之間的所有可能的公交車。我還希望上述查詢中的總票價(作爲總和函數)。

注:關係有一個叫做票價SUM(bus.fare)的屬性。

回答

1

隨着APOC Procedures你可以總結一個集合的元素,但你需要從巴士集合中的每個關係提取票價值:

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; 

希望這有助於。

Regards, Tom