2014-10-29 20 views
5

Verilerimi ArangoDB'de AQL ile nasıl gruplandırabilirim? Örneğin, benim yapıdır:ArangoDB 'Grup olarak' nasıl uygulanır (KOLEK veya ...?)

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

Ben benzersiz bir kimlik ve gerçek zaman damgasıyla veri almak istiyorum: gruplandırmak için

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

cevap

5

kullanabileceğiniz COLLECT:

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

Bu, benzersiz kimliklere sahip bir liste sunacak ve her benzersiz kimlik için kimlikli belge sayısını alacaksınız.

şimdi timestamp en yüksek değere sahip her grupta dokümanı almak için öncelikle damgası ile her gruba sıralamak gerekir:

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 

Son olarak, en yüksek zaman damgası değerine sahip sadece elemanının alınması için, names[0] kullanın (ve ayrıca yalnızca ilk öğe ile ilgileneceğiniz için bir LIMIT uygulayabilirsiniz):

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] 
İlgili konular