繁体   English   中英

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

[英]retrieve vertices with no linked edge in arangodb

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

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

FOR v IN vertex_collection  
    FILTER LENGTH( EDGES(edge_collection, v._id, "outbound"))==0
RETURN v._id

...

更新

...

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

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

这个要快得多(大约 0.05 秒),但看起来仍然像是某种解决方法(只是考虑到我们需要查询的多个边缘集合)。

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

我的建议将是类似的 - 而是使用连接而不是图形功能。

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 ,它将减少从内部查询传递的数据量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM