簡體   English   中英

ArangoDB:相關文檔的遍歷條件

[英]ArangoDB: Traversal condition on related document

被這個問題困擾了好幾天,試圖做到這一點:請參閱提供的圖片。 黑色是起始頂點。 試圖得到:

1:所有子部件 OUTBOUND(從)起始頂點

2:條件:孩子必須有 INBOUND 邊緣“類型”和另一端的文檔,其變量設置為“true”並且類型為“type”。

3:當“part”類型的文檔無法滿足“type”類型且屬性為“true”的INBOUND文檔的要求時,它會立即停止該路徑的擴展。

4:失敗的文檔也不包含在結果中。

5:應該與任何深度兼容。

6:沒有子查詢(如果可能沒有)。

圖表示例

根據給定的信息,數據 model 似乎有問題。 為什么每個partScrew都有true頂點而不是false邊緣屬性? 像這樣建模有什么原因嗎?

使用這個數據 model,我不明白如果沒有子查詢這怎么可能。 可以使用PRUNE提前停止沿路徑的遍歷,但這不支持子查詢。 這只留下FILTER用於后過濾作為選項,但請注意,您需要檢查路徑上的所有頂點,而不僅僅是發射的頂點是否具有入站false類型。

不確定它是否在所有情況下都按預期工作,但這是我想出的和查詢結果,這對我來說看起來不錯:

LET startScrew = FIRST(FOR doc IN screw LIMIT 1 RETURN doc) // Screw A
FOR v,e,p IN 1..2 OUTBOUND startScrew partScrew
  FILTER (
    FOR v_id IN SHIFT(p.vertices[*]._id) // ignore start vertex
      FOR v2 IN 1..1 INBOUND v_id types
      RETURN v2.value
  ) NONE == false
  RETURN {
    path: CONCAT_SEPARATOR(" -- ", p.vertices[*].value)
  }

注釋圖

小路
螺絲 A -- D 部分
螺絲 A -- E 部分
螺絲 A -- E 部分 -- F 部分

轉儲測試數據: https://gist.github.com/Simran-B/6bd9b154d1d1e2e74638caceff42c44f

暫無
暫無

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

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