簡體   English   中英

使用 ArangoDb AQL 過濾不同的圖邊類型

[英]Filter on different graph edge types using ArangoDb AQL

假設我有以下文檔集合:

  • 有姓名和學生 ID 的學生
  • 具有名稱和類 ID 的類
  • 具有名稱和位置 ID 的位置

以及以下指定關系的邊集合:

  • 帶有 _from 和 _to 引用以及開始和結束日期的 StudentClass
  • 只有 _from 和 _to 引用的 ClassLocations

在給定日期為學生返回顯示班級和位置的圖表的最佳方法是什么? 我一直在使用類似下面的東西,但它返回了不在日期范圍內的 StudentClass 邊緣。 此外,由於過濾器不在路徑上,我相信所有邊都將被遍歷,這意味着這可能無法很好地擴展。

FOR v, e, p
IN 1..10 OUTBOUND "Students/1234"
StudentClass, ClassLocations 
FILTER ((e.endDate > "2017-10-01") AND (e.startDate < "2017-10-01"))
 OR (e.endDate == null)
RETURN p

感謝 mark.arangodb,我已經能夠創建一個有效的解決方案:

FOR v, e, p
IN 1..10 OUTBOUND "Students/1234"
StudentClass, ClassLocations 
FILTER p.edges[*].startDate ALL <= @date
LET counter = (FOR e2 IN p.edges 
               FILTER NOT_NULL(e2.endDate, @date) >= @date 
               RETURN e2)
FILTER COUNT(counter) == COUNT(p.edges) 
RETURN p

第一個過濾器確保所有邊都必須在 @date 綁定參數中給出的日期(作為字符串)之前有一個 startDate。 沒有 startDate 屬性的邊通過此過濾器。 (ArangoDb 必須將 null 視為小於任何值的值。)

LET 語句創建一個名為“counter”的變量,並將其分配給具有大於給定日期的 endDate 或沒有 endDate 的邊數組。 最終過濾器僅允許具有與“counter”變量中的邊數相同的邊數的路徑。

暫無
暫無

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

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