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
.
在我的 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
.