如何在arangodb上对聚合进行存储

问题描述

想象一下我有一个这样的边缘文档:

[{
    "_from": "mobiles/12345","_to": "mobiles/54321","type": "call",},{
    "_from": "mobiles/54321","_to": "mobiles/32145","type": "sms","_to": "mobiles/12345",}]

我需要在 54321 上查询时得到这样的列表:

{"54321":3,"12345":2,"32145":1}

我试过了,但这不是我要找的:

for v,e,p in any "mobiles/54321" docs
COLLECT from = e._from,to = e._to with count into len 

return {from,to,len}

我在 Elasticsearch 中使用 aggs 查询很容易做到这一点

解决方法

您可以“展开” _from 和 _to 属性,然后按它们的文档键的联合而不是每个唯一的组合进行分组,计算每个键出现的频率并为每个具有动态属性键的存储桶返回一个对象。外部 MERGE() 创建将键映射到计数的最终对象:

RETURN MERGE(
  FOR v,e IN ANY "mobiles/54321" docs
    FOR id IN [e._from,e._to]
      COLLECT key = PARSE_IDENTIFIER(id).key WITH COUNT INTO len
      RETURN { [key]: len }
)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...