检索相关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)但仍然看起来像某种类型的工作(只考虑我们需要查询的多个边集合)。
所以我仍然在寻找找到特定边集合中没有边缘的顶点的最佳方法。
答案 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
,这将减少从内部查询传递的数据量。