summaryrefslogtreecommitdiff
path: root/jstests/core/geo_s2explain.js
blob: e5035713e38eb7b2bbdac1e632256f425d057a00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Test to check whether the number of intervals in a geoNear query equals
// the number of inputStages it completes

var t = db.jstests_geo_s2explain;
t.drop();

var point1 = { loc : { type : "Point", coordinates : [10, 10] } };
var point2 = { loc : { type : "Point", coordinates : [10.001, 10] } };
assert.writeOK( t.insert( [ point1, point2] ) );

assert.commandWorked( t.ensureIndex( { loc : "2dsphere"} ) );

var explain = t.find( {
        loc: { $nearSphere : { type : "Point", coordinates : [10, 10] } }
    } ).limit(1).explain("executionStats");
var inputStage = explain.executionStats.executionStages.inputStage;

assert.eq( 1, inputStage.searchIntervals.length );

// Populates the collection with a few hundred points at varying distances
var points = [];
for ( var i = 10; i < 70; i+=0.1 ) {
    points.push({ loc : { type : "Point", coordinates : [i, i] } });
}

assert.writeOK( t.insert( points ) );

explain = t.find( {
        loc: { $nearSphere : { type : "Point", coordinates : [10, 10] } }
    } ).limit(10).explain("executionStats");
inputStage = explain.executionStats.executionStages.inputStage;

assert.eq( inputStage.inputStages.length, inputStage.searchIntervals.length );

explain = t.find( {
        loc: { $nearSphere : { type : "Point", coordinates : [10, 10] } }
    } ).limit(50).explain("executionStats");
inputStage = explain.executionStats.executionStages.inputStage;

assert.eq( inputStage.inputStages.length, inputStage.searchIntervals.length );

explain = t.find( {
        loc: { $nearSphere : { type : "Point", coordinates : [10, 10] } }
    } ).limit(200).explain("executionStats");
inputStage = explain.executionStats.executionStages.inputStage;

assert.eq( inputStage.inputStages.length, inputStage.searchIntervals.length );