2014-10-29 15 views
5

Làm cách nào để nhóm dữ liệu của tôi trong ArangoDB bằng AQL? Ví dụ, cấu trúc của tôi là:ArangoDB cách áp dụng 'Nhóm theo' (THU THẬP hoặc ...?)

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

Tôi muốn nhận dữ liệu với một ID duy nhất và timestamp thực tế:

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

Trả lời

5

Để nhóm, bạn có thể sử dụng COLLECT:

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

Điều này sẽ cung cấp một danh sách với các id duy nhất, và cho mỗi id duy nhất bạn sẽ nhận được số lượng tài liệu với id.

Để bây giờ có được tài liệu với trong mỗi nhóm có giá trị cao nhất trong timestamp, trước tiên bạn cần phải sắp xếp từng nhóm bởi dấu thời gian:

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 

Cuối cùng, để nhận được chỉ là những thành viên có giá trị timestamp cao nhất, sử dụng names[0] (và bạn cũng có thể áp dụng một LIMIT trước bởi vì bạn sẽ chỉ được quan tâm đến mục đầu tiên):

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] 
Các vấn đề liên quan