我想获得一个密码,可以给我的路线和可用的座位来源到目的地。以下是我的图表设置Neo4j路径与过滤器
create (t1:Trip{id:"red"}), (t2:Trip{id:"blue"}), (a:City{id:"A"}), (b:City{id:"B"}), (c:City{id:"C"}), (d:City{id:"D"})
create (t1)-[:stop_at]->(a),(t1)-[:stop_at]->(b),(t1)-[:stop_at]->(c),(t1)-[:stop_at]->(d),(t2)-[:stop_at]->(a),(t2)-[:stop_at]->(b),(t2)-[:stop_at]->(c),(t2)-[:stop_at]->(d)
create (a)-[:red]->(b),(b)-[:red]->(c),(c)-[:red]->(d) create (a)-[:blue]->(b),(b)-[:blue]->(c),(c)-[:blue]->(d)
create (b)-[:red_01{seat:40}]->(c),(c)-[:red_01{seat:40}]->(d)
我有两个“旅行”,“红色”和“蓝色”。使用“旅行”ID在节点之间创建的关系(停止)只是抽象链接。我想寻找停在“A”和“D”的旅行,我用下面的查询返回旅行“红色”和“蓝色”。
match (t:Trip)-[:stop_at]->(c:City) where c.id = "A" or c.id = "D" return distinct t.id
然后,我想要得到的路径,我正在使用以下查询。
match (t:Trip)-[:stop_at]->(c:City) where c.id = "A" or c.id = "D" with distinct t.id as id
match (source:City{id:"A"})-[rel*]->(dest:City{id:"D"}) where all(item in rel where starts with id) return rel
它返回结合了每条可能路径的36行。例如:
[(A)-[:blue]->(B), (B)-[:blue]->(C), (C)-[:blue]->(D)]
[(A)-[:red]->(B), (B)-[:red]->(C), (C)-[:red]->(D)]
[(A)-[:red]->(B), (B)-[:red]->(C), (C)-[:red_01 {seat:40}]->(D)]
[(A)-[:red]->(B), (B)-[:red_01 {seat:40}]->(C), (C)-[:red]->(D)]
[(A)-[:red]->(B), (B)-[:red_01 {seat:40}]->(C), (C)-[:red_01 {seat:40}]->(D)]
我想获得情况如下:
[(A)-[:blue]->(B), (B)-[:blue]->(C), (C)-[:blue]->(D)]
[(A)-[:red]->(B), (B)-[:red_01 {seat:40}]->(C), (C)-[:red_01 {seat:40}]->(D)]
后缀“_01”是指有两个站之间的日期/时间之旅出售。对于所有的“红色”旅行,我希望只获得包含最大销售额的路径。如果我们看一下上面的结果,它将是第5行。“蓝色”之旅当天没有任何销售,所以我们将保留结果。
这里是neo4j控制台供您参考。非常感谢您的帮助。
http://console.neo4j.org/?id=2sho3j
瑞安
好问题 - 感谢提供样本数据集,并详细描述你的问题。但是,您的第三个查询片段不会编译:'where all(rel in以id开头的项目)'缺少某些内容。正确的表达应该像'WHERE ... STARTS WITH ...'一样阅读 –