mirror of https://gitee.com/bigwinds/arangodb
87 lines
6.5 KiB
Plaintext
87 lines
6.5 KiB
Plaintext
arangosh> db.geoSort.ensureIndex({ <span class="hljs-attr">type</span>: <span class="hljs-string">"geo"</span>, <span class="hljs-attr">fields</span>: [ <span class="hljs-string">"latitude"</span>, <span class="hljs-string">"longitude"</span> ] });
|
|
{
|
|
<span class="hljs-string">"constraint"</span> : <span class="hljs-literal">false</span>,
|
|
<span class="hljs-string">"fields"</span> : [
|
|
<span class="hljs-string">"latitude"</span>,
|
|
<span class="hljs-string">"longitude"</span>
|
|
],
|
|
<span class="hljs-string">"id"</span> : <span class="hljs-string">"geoSort/35146"</span>,
|
|
<span class="hljs-string">"ignoreNull"</span> : <span class="hljs-literal">true</span>,
|
|
<span class="hljs-string">"isNewlyCreated"</span> : <span class="hljs-literal">true</span>,
|
|
<span class="hljs-string">"sparse"</span> : <span class="hljs-literal">true</span>,
|
|
<span class="hljs-string">"type"</span> : <span class="hljs-string">"geo2"</span>,
|
|
<span class="hljs-string">"unique"</span> : <span class="hljs-literal">false</span>,
|
|
<span class="hljs-string">"code"</span> : <span class="hljs-number">201</span>
|
|
}
|
|
arangosh> <span class="hljs-keyword">for</span> (i = <span class="hljs-number">-90</span>; i <= <span class="hljs-number">90</span>; i += <span class="hljs-number">10</span>) {
|
|
........> <span class="hljs-keyword">for</span> (j = <span class="hljs-number">-180</span>; j <= <span class="hljs-number">180</span>; j += <span class="hljs-number">10</span>) {
|
|
........> db.geoSort.save({ <span class="hljs-attr">name</span> : <span class="hljs-string">"Name/"</span> + i + <span class="hljs-string">"/"</span> + j, <span class="hljs-attr">latitude</span> : i, <span class="hljs-attr">longitude</span> : j });
|
|
........> }
|
|
........> }
|
|
arangosh> <span class="hljs-keyword">var</span> query = <span class="hljs-string">"FOR doc in geoSort SORT DISTANCE(doc.latitude, doc.longitude, 0, 0) LIMIT 5 RETURN doc"</span>
|
|
arangosh> db._explain(query, {}, {<span class="hljs-attr">colors</span>: <span class="hljs-literal">false</span>});
|
|
Query string:
|
|
FOR doc <span class="hljs-keyword">in</span> geoSort SORT DISTANCE(doc.latitude, doc.longitude, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>) LIMIT <span class="hljs-number">5</span> RETURN doc
|
|
|
|
Execution plan:
|
|
Id NodeType Est. Comment
|
|
<span class="hljs-number">1</span> SingletonNode <span class="hljs-number">1</span> * ROOT
|
|
<span class="hljs-number">7</span> IndexNode <span class="hljs-number">703</span> - FOR doc IN geoSort <span class="hljs-comment">/* geo2 index scan */</span>
|
|
<span class="hljs-number">5</span> LimitNode <span class="hljs-number">5</span> - LIMIT <span class="hljs-number">0</span>, <span class="hljs-number">5</span>
|
|
<span class="hljs-number">6</span> ReturnNode <span class="hljs-number">5</span> - RETURN doc
|
|
|
|
Indexes used:
|
|
By Type Collection Unique Sparse Selectivity Fields Ranges
|
|
<span class="hljs-number">7</span> geo2 geoSort <span class="hljs-literal">false</span> <span class="hljs-literal">true</span> n/a [ <span class="hljs-string">`latitude`</span>, <span class="hljs-string">`longitude`</span> ] NEAR(doc, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>)
|
|
|
|
Optimization rules applied:
|
|
Id RuleName
|
|
<span class="hljs-number">1</span> geo-index-optimizer
|
|
<span class="hljs-number">2</span> remove-unnecessary-calculations<span class="hljs-number">-2</span>
|
|
|
|
|
|
arangosh> db._query(query);
|
|
[
|
|
{
|
|
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"36203"</span>,
|
|
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"geoSort/36203"</span>,
|
|
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"_WnWXFHK--N"</span>,
|
|
<span class="hljs-string">"name"</span> : <span class="hljs-string">"Name/0/0"</span>,
|
|
<span class="hljs-string">"latitude"</span> : <span class="hljs-number">0</span>,
|
|
<span class="hljs-string">"longitude"</span> : <span class="hljs-number">0</span>
|
|
},
|
|
{
|
|
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"36092"</span>,
|
|
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"geoSort/36092"</span>,
|
|
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"_WnWXFG2--L"</span>,
|
|
<span class="hljs-string">"name"</span> : <span class="hljs-string">"Name/-10/0"</span>,
|
|
<span class="hljs-string">"latitude"</span> : <span class="hljs-number">-10</span>,
|
|
<span class="hljs-string">"longitude"</span> : <span class="hljs-number">0</span>
|
|
},
|
|
{
|
|
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"36314"</span>,
|
|
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"geoSort/36314"</span>,
|
|
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"_WnWXFHe--H"</span>,
|
|
<span class="hljs-string">"name"</span> : <span class="hljs-string">"Name/10/0"</span>,
|
|
<span class="hljs-string">"latitude"</span> : <span class="hljs-number">10</span>,
|
|
<span class="hljs-string">"longitude"</span> : <span class="hljs-number">0</span>
|
|
},
|
|
{
|
|
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"36200"</span>,
|
|
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"geoSort/36200"</span>,
|
|
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"_WnWXFHK--L"</span>,
|
|
<span class="hljs-string">"name"</span> : <span class="hljs-string">"Name/0/-10"</span>,
|
|
<span class="hljs-string">"latitude"</span> : <span class="hljs-number">0</span>,
|
|
<span class="hljs-string">"longitude"</span> : <span class="hljs-number">-10</span>
|
|
},
|
|
{
|
|
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"36206"</span>,
|
|
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"geoSort/36206"</span>,
|
|
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"_WnWXFHO---"</span>,
|
|
<span class="hljs-string">"name"</span> : <span class="hljs-string">"Name/0/10"</span>,
|
|
<span class="hljs-string">"latitude"</span> : <span class="hljs-number">0</span>,
|
|
<span class="hljs-string">"longitude"</span> : <span class="hljs-number">10</span>
|
|
}
|
|
]
|
|
[object ArangoQueryCursor, <span class="hljs-attr">count</span>: <span class="hljs-number">5</span>, <span class="hljs-attr">cached</span>: <span class="hljs-literal">false</span>, <span class="hljs-attr">hasMore</span>: <span class="hljs-literal">false</span>]
|