在Neo4j中查询总价低于3000的LAX出发所有航线路径
解决方案:关联Ticket并筛选总价低于3000的路径
首先,我先结合你的描述和路径示例梳理下数据模型:
:Airport节点(比如LAX、BOS)通过:ORIGIN关系连接到:Flight节点(代表航班从该机场出发):Flight节点通过:DESTINATION关系连接到下一个:Airport节点(代表航班抵达该机场)- 每个
:Flight节点通过:ASSIGN关系关联到:Ticket节点,Ticket的price属性存储机票价格
你的原查询仅匹配了路径结构,但未关联Ticket也未做价格筛选,下面是修改后的完整查询及详细说明:
最终查询语句
// 匹配从LAX出发、最多包含5个关系的路径(和原查询保持一致的长度限制) MATCH path = (origin:Airport {name:"LAX"})-[:ORIGIN|:DESTINATION*..5]-(destination:Airport) // 提取路径中的所有Flight节点 WITH path, [node IN nodes(path) WHERE node:Flight] AS flightNodes // 为每个Flight节点匹配对应的Ticket UNWIND flightNodes AS flight MATCH (flight)-[:ASSIGN]->(ticket:Ticket) // 计算当前路径下所有Ticket的总价 WITH path, sum(ticket.price) AS totalPrice // 筛选总价低于3000的路径 WHERE totalPrice < 3000 // 返回路径及对应总价 RETURN path, totalPrice
关键步骤解释
精准匹配路径:原查询的
[r*..5]会匹配任意关系,这里我保留了长度限制,但明确了关系类型为:ORIGIN和:DESTINATION,避免匹配到无关关系。如果想确保路径是单向出发(无回头路),可以加上关系方向约束:MATCH path = (origin:Airport {name:"LAX"})-[:ORIGIN]->(:Flight)-[:DESTINATION]->(:Airport)-[:ORIGIN*0..4]->(:Flight)-[:DESTINATION*0..4]->(destination:Airport)这样会强制路径遵循「机场→航班→机场→航班→...」的正向结构,避免循环或反向路径。
提取Flight节点:通过
nodes(path)获取路径中的所有节点,再用[node IN nodes(path) WHERE node:Flight]过滤出所有航班节点——毕竟只有航班才关联Ticket。关联Ticket并计算总价:用
UNWIND拆分每个Flight节点单独处理,匹配对应的Ticket后,通过sum(ticket.price)计算整个路径的机票总价。筛选符合预算的路径:最后通过
WHERE totalPrice < 3000过滤出满足条件的路径,同时返回总价方便你查看验证。
额外优化建议
- 如果一个Flight关联多个Ticket(比如不同舱位的价格),上面的查询会返回该路径的所有可能总价组合。若只需每个路径的最低总价,可修改为:
MATCH path = (origin:Airport {name:"LAX"})-[:ORIGIN|:DESTINATION*..5]-(destination:Airport) WITH path, [node IN nodes(path) WHERE node:Flight] AS flightNodes UNWIND flightNodes AS flight MATCH (flight)-[:ASSIGN]->(ticket:Ticket) WITH path, min(ticket.price) AS flightMinPrice WITH path, sum(flightMinPrice) AS totalMinPrice WHERE totalMinPrice < 3000 RETURN path, totalMinPrice - 若想避免路径中出现重复机场(比如循环路径),可添加简单路径约束:
MATCH path = (origin:Airport {name:"LAX"})-[:ORIGIN|:DESTINATION*..5]-(destination:Airport) WHERE all(node IN nodes(path) WHERE single(n IN nodes(path) WHERE n = node)) // 后续步骤同上
内容的提问来源于stack exchange,提问作者Adishone
相关产品推荐
相关产品推荐

