Arangodb Aql SORT not work for edge iteration

675 views Asked by At

I am try sort the result of edge iteration by 'beginAt' attribute but it don´t work for me follows the aql code:

FOR f IN TRAVERSAL(client, careerEdges, "client/100", "outbound", {paths:true})

            let sorted = (
                FOR e IN f.path.edges
                    FILTER e.order <= 3
            SORT e.beginAt DESC
            RETURN e)

RETURN sorted

and the same to 'order' attribute. Always return the same sequence like this:

    [
  [],
  [
    {
      "_id": "careerEdges/240469605275",
      "_rev": "240469605275",
      "_key": "240469605275",
      "_from": "client/100",
      "_to": "careers/iniAlt",
      "order": 2,
      "$label": "noLonger",
      "beginAt": "2014-05-10 13:48:00",
      "endAt": "2014-07-20 13:48:00"
    }
  ],
  [
    {
      "_id": "careerEdges/240470064027",
      "_rev": "240470064027",
      "_key": "240470064027",
      "_from": "client/100",
      "_to": "careers/lidGru",
      "order": 3,
      "$label": "noLonger",
      "beginAt": "2014-07-20 13:48:00",
      "endAt": "2014-08-20 13:48:00"
    }
  ],
  [
    {
      "_id": "careerEdges/240469867419",
      "_rev": "240469867419",
      "_key": "240469867419",
      "_from": "client/100",
      "_to": "careers/iniEst",
      "endAt": null,
      "order": 1,
      "$label": "noLonger",
      "beginAt": "2014-06-10 13:48:00"
    }
  ]
]

My query is correctly?

1

There are 1 answers

0
stj On BEST ANSWER

Your query is producing a list of lists. The inner lists will be sorted by beginAt, but not the overall result.

If you want a flat list returned and sort it by some criterion, please try this instead:

FOR f IN TRAVERSAL(client, careerEdges, "client/100", "outbound", {paths:true})
  FOR e IN f.path.edges
    FILTER e.order <= 3
    SORT e.beginAt DESC
    RETURN e