簡體   English   中英

ArangoDB 查找連接的頂點

[英]ArangoDB finding connected vertices

我對 arangodb 很陌生並且非常喜歡它,但我正在努力創建查詢語句。 我有兩個集合(VA,VB)和它們之間的邊緣(EC)我想找到具有特定過濾器(不是通過 _id)的搜索 Va,然后返回文檔(VB)連接(通過 EC)其中 EC 具有特定屬性(例如活動: 真的)

在文檔中,我只找到了頂點已知的例子。 提前謝謝你,Jnl

是的,制作圖表會使它更容易一些,但您仍然可以在不使用圖表的情況下查詢它。

這是一個直接使用三個集合的示例:

FOR va IN VA
FILTER va.name == 'Bob'
    FOR e IN EC
    FILTER e._from == va._id && e.active == true
        FOR vb IN VB
        FILTER e._to == vb._id
        RETURN vb

如果您想使用圖表,看起來您可能已經在測試一個圖表,那么這將起作用:

LET myOrigin = FIRST(FOR d IN VA FILTER d.name == 'Bob' RETURN d._id)

FOR v, e, p IN 1..1 OUTBOUND myOrigin GRAPH 'GD'
FILTER p.edges[0].active == true
RETURN p.vertices[1]

需要注意的是, myOrigin需要是一個 _id,這意味着在設置值時您在分配值時使用FIRST(...) 這確保您返回單個值(第一個)而不是數組。

您的示例也適用:

FOR m IN VA FILTER m.name == 'Bob' 
    FOR v, e, p IN 1..1 ANY m GRAPH 'GD' 
    FILTER p.edges[0].active == true 
    RETURN v 

需要注意的是,此示例可以匹配多個文檔(因為多個文檔可以具有.name == 'Bob'並且它將返回VB中匹配的所有節點。

如果您希望結果顯示 VA 中的哪個條目與 VB 相關聯,並且可以選擇具有多個匹配的 VA 值,這將對您有所幫助:

FOR m IN VA FILTER m.name == 'Bob' 
    FOR v, e, p IN 1..1 ANY m GRAPH 'GD' 
    FILTER p.edges[0].active == true 
    RETURN {
        origin: m,
        connected_to: v 
    }

如果要清理結果,可以使用 UNSET 使結果更好:

FOR m IN VA FILTER m.name == 'Bob' 
    FOR v, e, p IN 1..1 ANY m GRAPH 'GD' 
    FILTER p.edges[0].active == true 
    RETURN {
        origin: UNSET(m, '_key', '_rev'),
        connected_to: UNSET(v, '_key', '_rev') 
    }

它只是從查詢中發送給您的結果中刪除這些鍵。

檢索數據的方法有很多種,僅查看不同的示例就可以真正幫助您了解 AQL。

暫無
暫無

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

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