summaryrefslogtreecommitdiff
path: root/jstests/core/geo2.js
blob: 4317d044f765badde629be20204fff13bb897037 (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

t = db.geo2;
t.drop();

n = 1;
arr = [];
for ( var x=-100; x<100; x+=2 ){
    for ( var y=-100; y<100; y+=2 ){
        arr.push( { _id : n++ , loc : [ x , y ] } );
    }
}
t.insert( arr );
assert.eq( t.count(), 100 * 100 );
assert.eq( t.count(), n - 1 );


t.ensureIndex( { loc : "2d" } );

fast = db.runCommand( { geoNear : t.getName() , near : [ 50 , 50 ] , num : 10 } );

function a( cur ){
    var total = 0;
    var outof = 0;
    while ( cur.hasNext() ){
        var o = cur.next();
        total += Geo.distance( [ 50 , 50 ] , o.loc );
        outof++;
    }
    return total/outof;
}

assert.close( fast.stats.avgDistance , a( t.find( { loc : { $near : [ 50 , 50 ] } } ).limit(10) ) , "B1" );
assert.close( 1.33333 , a( t.find( { loc : { $near : [ 50 , 50 ] } } ).limit(3) ) , "B2" );
assert.close( fast.stats.avgDistance , a( t.find( { loc : { $near : [ 50 , 50 ] } } ).limit(10) ) , "B3" );

printjson( t.find( { loc : { $near : [ 50 , 50 ] } } ).explain() );


assert.lt( 3 , a( t.find( { loc : { $near : [ 50 , 50 ] } } ).limit(50) ) , "C1" );
assert.gt( 3 , a( t.find( { loc : { $near : [ 50 , 50 , 3 ] } } ).limit(50) ) , "C2" );
assert.gt( 3 , a( t.find( { loc : { $near : [ 50 , 50 ] , $maxDistance : 3 } } ).limit(50) ) , "C3" );

// SERVER-8974 - test if $geoNear operator works with 2d index as well
var geoNear_cursor = t.find( { loc : { $geoNear : [50, 50] } } ).limit(100);
assert.eq( geoNear_cursor.count(true), 100 );