2014-10-29 5 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]