首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arangodb AQL查询

Arangodb AQL查询
EN

Stack Overflow用户
提问于 2017-10-05 11:36:40
回答 1查看 230关注 0票数 1

我有这样的数据组织方式:

这里有1k的教师,10k的学生,每个学生都有100项家庭作业。

我需要所有的家庭作业的学生,相关的老师通过课堂,或通过他们之间的直接联系。所有顶点和边都有一些属性,让我们假设所有必需的索引都已经构建好了,或者我们可以稍后再讨论它们。

我可以通过这样快速的查询获得所有所需的学生I:

代码语言:javascript
复制
$query1 = "FOR v1 IN 1..1 INBOUND @teacherId teacher_pupil FILTER v1.deleted == false RETURN DISTINCT v1._id";
$query2 = "FOR v2 IN 2..2 INBOUND @teacherId OUTBOUND teacher_class, INBOUND pupil_class FILTER v2.deleted == false RETURN DISTINCT v2._id";
$queryUnion = "FOR x IN UNION_DISTINCT (($query1), ($query2)) RETURN x";

然后我写了如下:

代码语言:javascript
复制
$query = "
LET pupilIds = ($queryUnion)

FOR pupilId IN pupilIds
    LET homeworks = (
        FOR homework IN 1..1 ANY pupilId pupil_homework
            return [homework._id, pupilId]
    )  
RETURN homeworks";

我有我的家庭作业,我甚至可以尝试过滤,但查询太慢-这是一个不正确的方式,我相信。

问题1我确信限制学生,或学生相关的家庭作业在查询/子查询中导致不正确的排序/分页。

我用纯图AQL查询做了另一次尝试:

代码语言:javascript
复制
$query1 = "FOR v1 IN 2..2 INBOUND @teacherId pupil_teacher, OUTBOUND pupil_homework RETURN v1._id";
$query2 = "FOR v2 IN 3..3 INBOUND @teacherId teacher_class, pupil_class, OUTBOUND pupil_homework RETURN v2._id";
$query = "FOR x IN UNION_DISTINCT (($query1), ($query2)) LIMIT 500, 500 RETURN x";

它的速度并不快,我也不知道如何通过属性过滤教师的顶点。

问题2构建这种AQL查询的最佳方法是什么,如何通过属性访问图的顶点过滤所有路径的部分?我能分页结果以节省内存和加速查询吗?我怎么才能加快速度呢?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-10-17 17:44:57

假设教师和学生通过类(2个出站链接)或直接(单个出站链接)和(没有其他方式)相互关联,您可以这样做

代码语言:javascript
复制
 FOR v IN 1..2 OUTBOUND "teacher_id" GRAPH "graph_name"
   FILTER LIKE(v._id, "pupil_collection_name/%")
     FOR homeworks IN 1 OUTBOUND v GRAPH "graph_name"
        LIMIT lowerLimit,numberOfItems
           RETURN homeworks

但是,如果有一种可能,一个老师和一个学生可以互相联系在一起,而不是一个类,我们将不得不过滤我们的查询与我们看到的边缘。

代码语言:javascript
复制
 FOR v IN 1..2 OUTBOUND "teacher_id" GRAPH "graph_name"
   FILTER LIKE(v._id, "pupil_collection_name/%") && (e.name == "ClassPupil" || e.name == "TeacherPupil")
     FOR homeworks IN 1 OUTBOUND v GRAPH "graph_name"
        LIMIT lowerLimit,numberOfItems
           RETURN homeworks

请注意,由于同一位老师可以直接与学生有联系,也可以通过一堂课,我们可以有非独特的家庭作业。因此,建议使用RETURN DISTINCT homeworks。但是,如果重复没有问题,那么上面的查询应该可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46584647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档