问题描述
[{
"_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 }
)