在我的ArangoDB图中,我有一个主题,与该主题相关的消息线程,以及这些消息线程内的消息。我想以这样一种方式遍历图形,即返回与消息线程关联的数据以及消息线程内的消息计数。
数据的结构非常简单:我有主题节点,边缘扩展到线程节点,关联日期和类别,以及从线程节点到消息节点的边缘。
我想返回存储在线程节点中的数据和附加到线程的消息计数。
我不确定如何使用for v, e, p in 1..2 outbound
语法执行此操作。我应该在for v, e, p in outbound
内嵌一个嵌套图吗?这仍然是高性能的吗?
答案 0 :(得分:7)
对不起,我们正在努力开发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
}
对于一些解释:我首先选择相关的线程。 接下来我做一个子查询,只需要一个线程的消息。 最后,我返回了我需要的信息。
在表现方面:
在数据访问方面(最有可能是"瓶颈"操作),FOR x IN 1..2 OUTBOUND [...]
和FOR x IN 1 OUTBOUND [...] FOR y IN 1 OUTBOUND x [...]
之间没有区别,两者都必须查看完全相同的文档。
在后一种情况下,查询优化可能会稍慢,但差异低于1ms
。