簡體   English   中英

連接到多個其他節點的arangodb節點

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

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