2014-10-29 17 views
5

Come posso raggruppare i miei dati in ArangoDB con AQL? Per esempio, la mia struttura è:ArangoDB come applicare 'Raggruppa per' (RACCOGLI o ...?)

[ 
    {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"}, 
] 

voglio ricevere i dati con un ID univoco e timestamp attuale:

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

risposta

5

Per gruppo, è possibile utilizzare COLLECT:

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

Questo fornirà un elenco con ID univoci e per ciascun ID univoco riceverai il numero di documenti con l'id.

Per ora ottenere il documento con in ogni gruppo con il valore più alto in timestamp, è necessario prima di ordinare ogni gruppo 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 

Infine, per ricevere solo il membro con il valore timestamp più alto, utilizzare names[0] (ed è anche possibile applicare uno LIMIT prima perché si sarà interessati solo al primo elemento):

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]