ArangoDB:通过图形遍历聚合计数

ArangoDB: Aggregating counts via graph traversal

在我的 ArangoDB 图表中,我有一个主题、与该主题关联的消息线程以及这些消息线程中的消息。我想以 return 与消息线程关联的数据以及消息线程内的消息计数的方式遍历图形。

数据的结构相当简单:我有主题节点、一条延伸到关联日期和类别的线程节点的边,以及一条从线程节点到消息节点的边。

我想return存储在线程节点中的数据和附加到线程的消息数。

我不确定如何使用 for v, e, p in 1..2 outbound 语法执行此操作。我应该只用 for v, e, p in outbound 里面的嵌套图吗?那仍然是高效的吗?

抱歉延迟,我们正在努力发布 3.1 ;)

我认为您已经找到了正确的解决方案: 在 1..2 OUTBOUND 语句中表达您想实现的目标并不容易。 用两个 1..1 OUTBOUND 语句来表述要容易得多。

根据您的解释,我认为您将使用以下查询:

FOR thread IN 1 OUTBOUND @start @@threadEdges
  LET nr = COUNT(FOR message IN 1 OUTBOUND thread @@messageEdges RETURN 1)
  RETURN {
    date: thread.date,
    category: thread.category,
    messages: nr
  }

一些解释:我首先 select 关联线程。 接下来我做一个子查询来简单地获取一个线程的消息。 最后我 return 我需要的信息。

性能方面: 在数据访问方面(很可能是 "bottleneck" 操作),FOR x IN 1..2 OUTBOUND [...]FOR x IN 1 OUTBOUND [...] FOR y IN 1 OUTBOUND x [...] 没有区别,两者都必须查看完全相同的文档。 在后一种情况下,查询优化可能会慢一些,但差异远低于 1ms.