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