首页 > 解决方案 > 如何在 arangodb 上存储聚合

问题描述

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

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

我需要在 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 查询很容易做到这一点

标签: pythonpython-3.xarangodbpyarango

解决方案


您可以“展开” _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 }
)

推荐阅读