2017-02-15 40 views
0

我想學習neo4j,所以我只是拿了一個旅行應用程序的用例來學習,但我不確定解決它的最佳方式。任何幫助將不勝感激。Neo4j cyper查詢:如何旅行

在此先感謝。

所以考慮中,我不得不從一個地方(地方)前往火車其他(代替c)的使用情況,但兩兩地之間沒有直接的聯繫。所以我們必須改變我們的火車PLACE B

兩個地方通過關係連接IS_CONNECTED關係。 指的綠色節點的圖像

在然後,如果有間兩塊地的is_connected關係則會有即CONNECTED_VIA一個走出去的關係從兩個節點共同的列車,這意味着它們是如何連接指紅色節點圖像

我的問題是我們如何想知道,我們必須站從一個地方b變更

我的理解是:

  1. 我們將檢查在兩個地通過IS_CONNECTED關係連接

    匹配(啓動:地方{名: 「海德堡」})(完:地方{名: 「法蘭克福」}) MATCH路徑=(開始) - [:IS_CONNECTED * ..] - >(結束) RETURN路徑

,這將表明,這兩個地方被連接

  • 然後我們會看到這個如果地點A和地點c直接連接或不通過查詢

    匹配(p:place {name:「heidelberg」}) - [:CONNECTED_VIA] - >(q)< - [:CONNECTED_VIA] - ( T:地方{名: 「法蘭克福」}) 回報q

  • 而且因爲沒有直接的聯繫,這將返回任何

  • 我的大腦停止後運行這個。我試圖從過去3天算起。我很抱歉,我看AO混淆
  • 回答

    0

    你想在你的使用可變長度的關係:CONNECTED_VIA比賽,然後得到:這是在你的路徑廣場節點。使用上限通常是一個好主意,無論您的圖表是否合理。

    然後,我們可以在路徑中的節點上使用過濾器,只保留那些是:放置節點。

    match path = (p:place{name:"heidelberg"})-[:CONNECTED_VIA*..4]-(t:place{name:"frankfurt"}) 
    return path, [node in nodes(path)[1..-1] where node:Place] as connectionPlaces 
    

    如果你只是在最短的路徑有興趣,你可能要檢查的shortestPath() or shortestPaths() functions

    最後要注意的是......當確定兩個位置是否連接時,如果所有連接都需要是真或假,則可以使用EXISTS()函數返回是否存在此模式:

    match (start:place{name:"heidelberg"}), (end:place{name:"frankfurt"}) 
    return exists((start)-[:IS_CONNECTED*..5]->(end)) 
    
    +0

    非常感謝!這是我正在尋找的 –