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
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]