summaryrefslogtreecommitdiff
path: root/jstests/core/geo_s2explain.js
blob: 97f45e89a68925d7ad347c39405b6a2b2830d265 (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);