我有一个ArangoDB,它有两个集合,一个用于Documents,一个用于Edges,我希望有一个高效的查询,能够只返回共享相同_to
和_from
值的Edges。
例如,假设我的文档集合包含A、B、C和D。还假设我的边缘集合包含X、Y和Z。
边X是_from
A和_to
B。
边Y也是_from
A和_to
B。
边Z是_from
C和_to
D。
但是,我不知道X和Y基本上是相同的边,也不知道共享相似边的文档是A和B。我的查询是找出这些重复的边。
目前为止,我所掌握的情况如下:
FOR ec1 IN edge_collection
FOR ec2 IN edge_collection
FILTER ec1._key != ec2._key AND ec1._to == ec2._to AND ec1._from == ec2._from
RETURN ec1
这似乎是可行的,尽管感觉效率非常低。有没有更好的方法来实现这一点,或者这是AQL的最佳解决方案?
2条答案
按热度按时间rkttyhzu1#
可以按
_from
和_to
分组,计算每组有多少条边,然后过滤出唯一的组合:或者,如果您也要返回边缘关键点:
或者,使用聚合代替后期计算:
要返回完整的边缘,请使用
INTO edges = ec
。您也可以只使用INTO edges
,但这样每个边缘都将嵌套在对象{"ec": … }
中。mpbci0fu2#
经过进一步的研究,我发现了一种使用COLLECT语句的明显更快的方法。
此外,完全披露,这是我建立了this other answer。
编辑:
基于@CodeManX的答案,我的最终目标是能够删除这些重复的值,或者更确切地说是REMOVE这些重复的值。如果有人出于类似的目的偶然发现了这一点,这可能会有所帮助: