繁体   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