[英]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.