ArangoDB v3.13 is under development and not released yet. This documentation is not final and potentially incomplete.
Sort and limit
Cap the result count with LIMIT
It may not always be necessary to return all documents, that a FOR
loop
would normally return. You can limit the amount of documents
with a LIMIT
operation:
FOR c IN Characters
LIMIT 5
RETURN c.name
[
"Joffrey",
"Tommen",
"Tyrion",
"Roose",
"Tywin"
]
LIMIT
is followed by a number for the maximum document count. There is a
second syntax however, which allows you to skip a certain amount of record
and return the next n documents:
FOR c IN Characters
LIMIT 2, 5
RETURN c.name
[
"Tyrion",
"Roose",
"Tywin",
"Samwell",
"Melisandre"
]
See how the second query skipped the first two names and returned the next five (both results feature Tyrion, Roose and Tywin).
Sort by name with SORT
The order in which matching records were returned by the queries shown until
here was basically random. To return them in a defined order, you can add a
SORT()
operation. It can have a big impact on the result if combined with
a LIMIT()
, because the result becomes predictable if you sort first.
FOR c IN Characters
SORT c.name
LIMIT 10
RETURN c.name
[
"Arya",
"Bran",
"Brienne",
"Bronn",
"Catelyn",
"Cersei",
"Daario",
"Daenerys",
"Davos",
"Ellaria"
]
See how it sorted by name, then returned the ten alphabetically first coming
names. You can reverse the sort order with DESC
like descending:
FOR c IN Characters
SORT c.name DESC
LIMIT 10
RETURN c.name
[
"Ygritte",
"Viserys",
"Varys",
"Tywin",
"Tyrion",
"Tormund",
"Tommen",
"Theon",
"The High Sparrow",
"Talisa"
]
The first sort was ascending, which is the default order. Because it is the
default, it is not required to explicitly ask for ASC
order.
Sort by multiple attributes
Assume you want to sort by surname. Many of the characters share a surname.
The result order among characters with the same surname is undefined. You can
first sort by surname
, then name
, to determine the order:
FOR c IN Characters
FILTER c.surname
SORT c.surname, c.name
LIMIT 10
RETURN {
surname: c.surname,
name: c.name
}
[
{ "surname": "Baelish", "name": "Petyr" },
{ "surname": "Baratheon", "name": "Joffrey" },
{ "surname": "Baratheon", "name": "Robert" },
{ "surname": "Baratheon", "name": "Stannis" },
{ "surname": "Baratheon", "name": "Tommen" },
{ "surname": "Bolton", "name": "Ramsay" },
{ "surname": "Bolton", "name": "Roose" },
{ "surname": "Clegane", "name": "Sandor" },
{ "surname": "Drogo", "name": "Khal" },
{ "surname": "Giantsbane", "name": "Tormund" }
]
Overall, the documents are sorted by last name. If the surname
is the same
for two characters, the name
values are compared and the result sorted.
Note that a filter is applied before sorting, to only let documents through,
that actually feature a surname value (many don’t have it and would cause
null
values in the result).
Sort by age
The order can also be determined by a numeric value, such as the age:
FOR c IN Characters
FILTER c.age
SORT c.age
LIMIT 10
RETURN {
name: c.name,
age: c.age
}
[
{ "name": "Bran", "age": 10 },
{ "name": "Arya", "age": 11 },
{ "name": "Sansa", "age": 13 },
{ "name": "Jon", "age": 16 },
{ "name": "Theon", "age": 16 },
{ "name": "Daenerys", "age": 16 },
{ "name": "Samwell", "age": 17 },
{ "name": "Joffrey", "age": 19 },
{ "name": "Tyrion", "age": 32 },
{ "name": "Brienne", "age": 32 }
]
A filter is applied to avoid documents without age attribute. The remaining documents are sorted by age in ascending order, and the name and age of the ten youngest characters are returned.
See the SORT operation and LIMIT operation documentation for more details.