【问题标题】:how to bucket aggregate on arangodb如何在 arangodb 上存储聚合
【发布时间】:2023-03-08 23:05:01
【问题描述】:

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

[{
    "_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 查询很容易做到这一点

【问题讨论】:

  • 你也标记了python3.x,原生python3解决方案也可以吗?
  • 我的意思是 AQL 答案,感谢@CodeManX 我明白了,但谢谢

标签: python python-3.x arangodb pyarango


【解决方案1】:

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

【讨论】:

  • 谢谢你的回答我可以问一下使用[key]而不是key的原因吗?
  • 你说想要的结果是{"54321":3, "12345":2,"32145":1}。使用[key] 将使用key 作为属性名称(例如"12345"),而仅key 将直接命名为"key"。这也是它在 JavaScript 中的工作方式。不需要引用属性键,除非它包含需要它的字符(如空格)并且将逐字使用。方括号语法允许您改用动态表达式。 arangodb.com/docs/stable/aql/…
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多