2014-10-29 19 views
5

如何将我的数据与AQL分组在ArangoDB中?例如,我的结构是:ArangoDB如何应用“分组依据”(COLLECT或...?)

[ 
    {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 
} 

回答

5

分组,您可以使用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](也可以先申请LIMIT,因为您只会对第一项感兴趣):

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]