6

如何使用 AQL 对 ArangoDB 中的数据进行分组?例如,我的结构是:

[
    {name: "karl", id: "1", timestamp: "11112"},
    {name: "migele", id": "2", timestamp: "11114"},
    {name: "martina", id": "2", timestamp: "11116"},
    {name: "olivia", id": "3", timestamp: "11118"},
    {name: "sasha", id": "4", timestamp: "111120"},
]

我想接收具有唯一 ID 和实际时间戳的数据:

{
    karl,
    martina (because martina timestamp > migele timestamp and his ids is equals),
    olivia,
    sasha
}
4

1 回答 1

8

要分组,您可以使用COLLECT

FOR doc IN collection
  COLLECT id = doc.id INTO g
  RETURN { id: id, docs: LENGTH(g) }

这将提供一个具有唯一 ID 的列表,对于每个唯一 ID,您将收到具有该 ID 的文档数量。

现在要获取每个组中具有最高值的文档timestamp,您首先需要按时间戳对每个组进行排序:

FOR doc IN collection
  COLLECT id = doc.id INTO g 
  LET names = (FOR value IN g[*].doc SORT value.timestamp DESC RETURN value.name) 
  RETURN names

最后,要仅接收具有最高时间戳值的成员,请使用names[0](您也可以应用LIMITbefore,因为您只会对第一项感兴趣):

FOR doc IN collection
  COLLECT id = doc.id INTO g 
  LET names = (FOR value IN g[*].doc SORT value.timestamp LIMIT 1 DESC RETURN value.name) 
  RETURN names[0]
于 2014-10-29T15:03:59.940 回答