arangosh> db.geoSort.ensureIndex({ type: "geo", fields: [ "latitude", "longitude" ] });
{
"bestIndexedLevel" : 17,
"fields" : [
"latitude",
"longitude"
],
"geoJson" : false,
"id" : "geoSort/128312",
"isNewlyCreated" : true,
"maxNumCoverCells" : 8,
"sparse" : true,
"type" : "geo",
"unique" : false,
"worstIndexedLevel" : 4,
"code" : 201
}
arangosh> for (i = -90; i <= 90; i += 10) {
........> for (j = -180; j <= 180; j += 10) {
........> db.geoSort.save({ name : "Name/" + i + "/" + j, latitude : i, longitude : j });
........> }
........> }
arangosh> var query = "FOR doc in geoSort SORT DISTANCE(doc.latitude, doc.longitude, 0, 0) LIMIT 5 RETURN doc"
arangosh> db._explain(query, {}, {colors: false});
Query String:
FOR doc in geoSort SORT DISTANCE(doc.latitude, doc.longitude, 0, 0) LIMIT 5 RETURN doc
Execution plan:
Id NodeType Est. Comment
1 SingletonNode 1 * ROOT
7 IndexNode 703 - FOR doc IN geoSort
5 LimitNode 5 - LIMIT 0, 5
6 ReturnNode 5 - RETURN doc
Indexes used:
By Type Collection Unique Sparse Selectivity Fields Ranges
7 geo geoSort false true n/a [ `latitude`, `longitude` ] (GEO_DISTANCE([ 0, 0 ], [ doc.`longitude`, doc.`latitude` ]) < "unlimited")
Optimization rules applied:
Id RuleName
1 geo-index-optimizer
2 remove-unnecessary-calculations-2
arangosh> db._query(query);
[
{
"_key" : "129369",
"_id" : "geoSort/129369",
"_rev" : "_Y2g7EDS--F",
"name" : "Name/0/0",
"latitude" : 0,
"longitude" : 0
},
{
"_key" : "129258",
"_id" : "geoSort/129258",
"_rev" : "_Y2g7EC2--D",
"name" : "Name/-10/0",
"latitude" : -10,
"longitude" : 0
},
{
"_key" : "129366",
"_id" : "geoSort/129366",
"_rev" : "_Y2g7EDS--D",
"name" : "Name/0/-10",
"latitude" : 0,
"longitude" : -10
},
{
"_key" : "129480",
"_id" : "geoSort/129480",
"_rev" : "_Y2g7EDy--F",
"name" : "Name/10/0",
"latitude" : 10,
"longitude" : 0
},
{
"_key" : "129372",
"_id" : "geoSort/129372",
"_rev" : "_Y2g7EDS--H",
"name" : "Name/0/10",
"latitude" : 0,
"longitude" : 10
}
]
[object ArangoQueryCursor, count: 5, cached: false, hasMore: false]