[英]Filter on different graph edge types using ArangoDb AQL
假設我有以下文檔集合:
以及以下指定關系的邊集合:
在給定日期為學生返回顯示班級和位置的圖表的最佳方法是什么? 我一直在使用類似下面的東西,但它返回了不在日期范圍內的 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.