我有一个图表数据库,其中机场通过航班使用关系相互连接:ORIGIN和:DESTINATION。每个航班都有一张关系相关的票:ASSIGN。价格保存在机票上。
现在我需要找到从机场LAX开始的所有路径,但价格低于3000。 我能够找到所有路径,但我不知道如何连接它的门票。
我查询路径的查询:
MATCH (origin:Airport { name:"LAX" }),(destination:Airport)
WITH origin,destination
MATCH path = (origin)-[r*..5]-(destination)
RETURN path
从该查询返回的一条路径:
[{“name”:“LAX”},{},{“date”:“2015年11月29日15:18:22”,“持续时间”:269,“dista nce“:2611,”airline“:”19977“},{”date“:”2015年11月29日15:18:22“,”持续时间“: 269, “距离”:2611, “航空公司”: “19977”},{},{ “名称”: “BOS”},{ “名称”: “BOS” },{},{“date”:“2015年11月29日01:20:17”,“持续时间”:289,“距离”:2704,“空气 line“:”19977“},{”date“:”2015年11月29日01:20:17“,”持续时间“:289,”距离“ :2704, “航空公司”: “19977”},{},{ “名称”: “SFO”}]
如何为它分配票证并在哪里只有价格低于3000的那些?
答案 0 :(得分:0)
使用此查询生成样本数据:
CREATE (origin:Airport { name:"LAX" })<-[:ORIGIN]-(f1:Flight {date:"11/29/2015 15:18:22",duration:269,distance:2611,airline:"19977"})-[:DESTINATION]->(d1:Airport {name:"BOS"})<-[:ORIGIN]-(f2:Flight {date:"11/29/2015 01:20:17",duration:289,distance :2704,airline:"19977"})-[:DESTINATION]->(d2:Airport {name:"SFO"}),
(t:Ticket {id: 1, price: 1234})-[:ASSIGN]->(f1),
(t1:Ticket {id: 2, price: 555})-[:ASSIGN]->(f2)
此查询应生成长度为5的所有路径,其中每条腿的价格小于3000:
MATCH path = (origin:Airport { name:"LAX" })<-[r:ORIGIN|DESTINATION*..5]->(destination:Airport)
WHERE ALL(f IN [n IN NODES(path) WHERE 'Flight' IN LABELS(n)]
WHERE [(f)<-[:ASSIGN]-(ticket) | ticket.price < 3000][0])
RETURN path
结果将包含2个路径。如果您将t1
的价格更改为3000,则结果将只包含1个路径(较短的路径)。
[UPDATE]
如果您只想要总票价低于3000的路径,那么这将有效:
MATCH path = (origin:Airport { name:"LAX" })<-[r:ORIGIN|DESTINATION*..5]->(destination:Airport)
WHERE REDUCE(s = 0, n IN [x IN NODES(path) WHERE 'Flight' IN LABELS(x)] |
s + [(n)<-[:ASSIGN]-(ticket) | ticket.price][0]
) < 3000
RETURN path