Использование этого запроса для получения образцов данных:
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 путь (более короткий).
[ОБНОВЛЕНИЕ]
Если вам нужны только пути, в которых указан общий тикетцена меньше 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