[英]arangodb nodes connected to multiple others
我剛剛開始使用arangodb,現在已經解決了我的第一個真正的問題:
是否可以搜索連接到多個其他節點的節點? 這似乎是圖形數據庫的基本操作,但我想不出解決方案。
作為參考,如果我們使用“知道”示例圖,我想知道哪些人知道Charlie AND Dave(應該只是Bob)
知道示例圖 (尚不能嵌入圖像)
現在,我最好的猜測是開始遍歷所有“目標”並自己減少和過濾響應,這真的是唯一的方法嗎?
編輯:好的,要進一步指定我添加了另一個連接,夏娃也知道戴夫,但不應該返回,因為她不知道查理
EDIT2:到目前為止,我已經提出了這個查詢
FOR start IN ['persons/charlie', 'persons/dave']
LET knownBy = (FOR v,e,p IN 1 INBOUND start knows
RETURN v)
FOR p IN knownBy
COLLECT person = p
LET knows = (FOR v IN 1 OUTBOUND person._id knows
RETURN v._id)
FILTER knows ALL IN ['persons/charlie', 'persons/dave']
RETURN person
但是,這感覺有點不自然,要讓被“ X”認識的人要讓了解“ X”的人……而且,分析器顯示,大約有三分之一的時間用於優化計划,因此必須是更好的解決方案,對不對?
如果我們以已知示例為例,並且僅搜索兩個相連的頂點,則可以在深度為2的一個目標上開始遍歷,並過濾路徑上的第三個頂點必須是第二個目標,那么您只需返回第二個頂點在路上。
FOR v, e, p IN 2 ANY 'persons/charlie' knows
FILTER p.vertices[2]._id == 'persons/dave'
RETURN p.vertices[1]
如果搜索兩個以上的頂點,則下面的查詢應該可以正常工作。 它開始深度為1的遍歷,並收集鄰居的每個_id,並且對目標的檢查都包含在鄰居中。
LET targets = ['persons/charlie','persons/dave']
FOR person IN persons
FILTER targets ALL IN FLATTEN((
FOR v, e, p IN 1 ANY person._id knows
RETURN v._id
))
RETURN person
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.