arangosh> db.geoSort.ensureIndex({ type: "geo", fields: [ "latitude", "longitude" ] });
{
"constraint" : false,
"fields" : [
"latitude",
"longitude"
],
"id" : "geoSort/35146",
"ignoreNull" : true,
"isNewlyCreated" : true,
"sparse" : true,
"type" : "geo2",
"unique" : false,
"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 geo2 geoSort false true n/a [ `latitude`, `longitude` ] NEAR(doc, 0, 0)
Optimization rules applied:
Id RuleName
1 geo-index-optimizer
2 remove-unnecessary-calculations-2
arangosh> db._query(query);
[
{
"_key" : "36203",
"_id" : "geoSort/36203",
"_rev" : "_WnWXFHK--N",
"name" : "Name/0/0",
"latitude" : 0,
"longitude" : 0
},
{
"_key" : "36092",
"_id" : "geoSort/36092",
"_rev" : "_WnWXFG2--L",
"name" : "Name/-10/0",
"latitude" : -10,
"longitude" : 0
},
{
"_key" : "36314",
"_id" : "geoSort/36314",
"_rev" : "_WnWXFHe--H",
"name" : "Name/10/0",
"latitude" : 10,
"longitude" : 0
},
{
"_key" : "36200",
"_id" : "geoSort/36200",
"_rev" : "_WnWXFHK--L",
"name" : "Name/0/-10",
"latitude" : 0,
"longitude" : -10
},
{
"_key" : "36206",
"_id" : "geoSort/36206",
"_rev" : "_WnWXFHO---",
"name" : "Name/0/10",
"latitude" : 0,
"longitude" : 10
}
]
[object ArangoQueryCursor, count: 5, cached: false, hasMore: false]