深入學習Gremlin(15):合併

第15期 Gremlin Steps:

coalesce()optional()union()

本系列文章的Gremlin示例均在HugeGraph圖數據庫上執行,環境搭建可參考準備Gremlin執行環境,本文示例均以其中的“TinkerPop關係圖”爲初始數據。

tinkerpop關係圖

上一期:深入學習Gremlin(14):分支

分支操作說明

  • coalesce: 可以接受任意數量的遍歷器(traversal),按順序執行,並返回第一個能產生輸出的遍歷器的結果;
  • optional: 只能接受一個遍歷器(traversal),如果該遍歷器能產生一個結果,則返回該結果,否則返回調用optionalStep的元素本身。當連續使用.optional()時,如果在某一步返回了調用元素本身,則後續的.optional()不會繼續執行;
  • union: 可以接受任意數量的遍歷器(traversal),並能夠將各個遍歷器的輸出合併到一起;

實例講解

下面通過實例來深入理解每一個操作。

  1. Step coalesce()

    示例1:

    // 按優先級尋找到頂點“HugeGraph”的以下邊和鄰接點,找到一個就停止
    // 1、“implements”出邊和鄰接點
    // 2、“supports”出邊和鄰接點
    // 3、“created”入邊和鄰接點
    g.V('3:HugeGraph').coalesce(outE('implements'), outE('supports'), inE('created')).inV().path().by('name').by(label)
    

    HugeGraph這三類邊都是存在的,按照優先級,返回了“implements”出邊和鄰接點。

    示例2:

    // 按優先級尋找到頂點“HugeGraph”的以下邊和鄰接點,找到一個就停止(調換了示例1中的1和2的順序)
    // 1、“supports”出邊和鄰接點
    // 2、“implements”出邊和鄰接點
    // 3、“created”入邊和鄰接點
    g.V('3:HugeGraph').coalesce(outE('supports'), outE('implements'),  inE('created')).inV().path().by('name').by(label)
    

    這次由於“supports”放在了“implements”的前面,所以返回了“supports”出邊和鄰接點。

    自己動手比較一下outE('supports'), outE('implements'), inE('created').coalesce()中隨意調換順序的區別。

  2. Step optional()

    示例1:

    // 查找頂點"linary"的“created”出頂點,如果沒有就返回"linary"自己
    g.V('linary').optional(out('created'))
    

    示例2:

    // 查找頂點"linary"的“knows”出頂點,如果沒有就返回"linary"自己
    g.V('linary').optional(out('knows'))
    

    示例3:

    // 查找每個“person”頂點的出“knows”頂點,如果存在,然後以出“knows”頂點爲起點,繼續尋找其出“created”頂點,最後打印路徑
    g.V().hasLabel('person').optional(out('knows').optional(out('created'))).path()
    

    結果中的後面四個頂點因爲沒有出“knows”頂點,所以在第一步返回了自身後就停止了。

  3. Step union()

    示例1:

    // 尋找頂點“linary”的出“created”頂點,鄰接“knows”頂點,並將結果合併
    g.V('linary').union(out('created'), both('knows')).path()
    

    示例2:

    // 尋找頂點“HugeGraph”的入“created”頂點(創作者),出“implements”和出“supports”頂點,並將結果合併
    g.V('3:HugeGraph').union(__.in('created'), out('implements'), out('supports'), out('contains')).path()
    

    頂點“HugeGraph”沒有“contains”邊,所以只打印出了其作者(入“created”),它實現的框架(出“implements”)和支持的特性(出“supports”)。

下一期:深入學習Gremlin(16):結果聚集與展開

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章