在arangodb中检索没有链接边的顶点

时间:2016-03-28 21:44:39

标签: arangodb aql

检索相关edge_collection中没有边的所有顶点的最佳方法是什么

我尝试使用以下代码但是自从arangodb 2.8以来它变得非常慢(在以前的版本中它的速度并不快,但是比现在快了大约10倍)。对于大约1000个边缘和大约3000个顶点的集合大小,它需要超过30秒。

LET vIDs = (FOR v IN vertex_collection
            RETURN v._id)
LET vEdgesFrom = (FOR e IN edge_collection
                  FILTER e._from IN vIDs
                  RETURN e._from)
FOR v IN vertex_collection
    FILTER v._id IN MINUS(vIDs, vEdgesFrom)
RETURN v._id

...

更新

...

在玩了一下后,我来到了以下查询

mousemove

这个更快(大约0.05s)但仍然看起来像某种类型的工作(只考虑我们需要查询的多个边集合)。

所以我仍然在寻找找到特定边集合中没有边缘的顶点的最佳方法。

1 个答案:

答案 0 :(得分:2)

我的消化方式与之相似 - 而不是使用joins而不是图形功能。

FOR oneEdge IN edges
LET vertices=(FOR oneVertex IN vertices
        FILTER oneEdge._from == oneVertex._id OR
               oneEdge._to == oneVertex._id
        RETURN 1)
FILTER LENGTH(vertices) < 2
RETURN {v: vertices, e: oneEdge}

找到_from_to之一指向nil的所有边,然后将其删除。

请注意RETURN 1,这将减少从内部查询传递的数据量。