簡體   English   中英

ArangoDB 圖遍歷對不同的頂點類型使用不同的過濾器

[英]ArangoDB graph traversal with different filter for different vertex types

我需要能夠按頂點類型過濾 arangodb 圖遍歷。 有兩種頂點類型,比如說 vA 和 vB。 只有一種邊,可以連接 _to 和 _from 任一類型的頂點。

vA 具有帶有數值的屬性“pfi”。 vB 有一個屬性“別名”,它是幾個屬性/值對整數作為字符串的字典(文檔):integer。 integer-as-string 屬性包含與 vA 中的 pfi 屬性相同類型的數據/數字。

我從每個起始頂點 p0(在查詢的前面確定)開始。 每個 p0 都有屬性“零點 id”和“pfi”。

我需要沿出站方向遍歷,並且只保留 vA 類型的所有頂點都具有與 p0.pfi 匹配的“pfi”的路徑,並且所有 vB 類型的頂點都具有與 pfi 匹配的“別名”屬性。

FOR p0 in points
    FOR v, e, p IN 1..5 OUTBOUND p0['zero point id'] GRAPH 'grph'
        FILTER p.vertices[*]['pfi'] ALL == p0['pfi']
            OR p.vertices[*]['aliases'][TO_STRING(p0['pfi'])] NONE == null
        RETURN {
            'pfi': p0['pfi']
            , 'vertices': p.vertices
            , 'edges': p.edges
        }

我在上面嘗試了幾種語法變體,所有這些都具有相同的行為:如果我刪除過濾器,我會得到所有(未過濾的)路徑,而過濾器的結果是空的。 認為這是因為所有路徑都包含兩種頂點類型,並且 OR 的邏輯並不意味着任何一個條件都可以為任何單個頂點通過。

我該如何表達這一點,以便第一個條件適用於 vA 類型,第二個條件適用於 vB 類型?

我發現了這個: Filter on different graph edge types using ArangoDb AQL ,它可以適應

FOR p0 in points
    FOR v, e, p IN 1..5 OUTBOUND p0['zero point id'] GRAPH 'grph'
        LET counter = (
            FOR v2 in p.vertices
                FILTER v2['pfi'] == p0['pfi']
                    OR HAS(v2['aliases'], TO_STRING(p0['pfi']))
            RETURN v2
        )
        FILTER COUNT(counter) == COUNT(p.vertices)
RETURN {
    'pfi': p0['pfi']
    , 'edges': p.edges
}

它有效,但感覺就像一個笨拙的解決方法。 有沒有更優雅的方式?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM