arangosh> db.geoFilter.ensureIndex({ type: "geo", fields: [ "latitude", "longitude" ] }); { "bestIndexedLevel" : 17, "fields" : [ "latitude", "longitude" ], "geoJson" : false, "id" : "geoFilter/83293", "isNewlyCreated" : true, "maxNumCoverCells" : 8, "name" : "idx_1646382083452436480", "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.geoFilter.save({ name : "Name/" + i + "/" + j, latitude : i, longitude : j }); ........> } ........> } arangosh> var query = "FOR doc in geoFilter FILTER DISTANCE(doc.latitude, doc.longitude, 0, 0) < 2000 RETURN doc" arangosh> db._explain(query, {}, {colors: false}); Query String (89 chars, cacheable: true): FOR doc in geoFilter FILTER DISTANCE(doc.latitude, doc.longitude, 0, 0) < 2000 RETURN doc Execution plan: Id NodeType Est. Comment 1 SingletonNode 1 * ROOT 6 IndexNode 703 - FOR doc IN geoFilter /* geo index scan */ 5 ReturnNode 703 - RETURN doc Indexes used: By Name Type Collection Unique Sparse Selectivity Fields Ranges 6 idx_1646382083452436480 geo geoFilter false true n/a [ `latitude`, `longitude` ] (GEO_DISTANCE([ 0, 0 ], [ doc.`longitude`, doc.`latitude` ]) < 2000) Optimization rules applied: Id RuleName 1 geo-index-optimizer 2 remove-unnecessary-calculations-2 arangosh> db._query(query); [ { "_key" : "83999", "_id" : "geoFilter/83999", "_rev" : "_ZXF6ez---C", "name" : "Name/0/0", "latitude" : 0, "longitude" : 0 } ] [object ArangoQueryCursor, count: 1, cached: false, hasMore: false]