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