diff options
Diffstat (limited to 'jstests/core/geo3.js')
-rw-r--r-- | jstests/core/geo3.js | 111 |
1 files changed, 57 insertions, 54 deletions
diff --git a/jstests/core/geo3.js b/jstests/core/geo3.js index a11c24ed338..da3d8641049 100644 --- a/jstests/core/geo3.js +++ b/jstests/core/geo3.js @@ -4,80 +4,83 @@ 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 ] , a : Math.abs( x ) % 5 , b : Math.abs( y ) % 5 } ); +for (var x = -100; x < 100; x += 2) { + for (var y = -100; y < 100; y += 2) { + arr.push({_id: n++, loc: [x, y], a: Math.abs(x) % 5, b: Math.abs(y) % 5}); } } -t.insert( arr ); -assert.eq( t.count(), 100 * 100 ); -assert.eq( t.count(), n - 1 ); +t.insert(arr); +assert.eq(t.count(), 100 * 100); +assert.eq(t.count(), n - 1); +t.ensureIndex({loc: "2d"}); -t.ensureIndex( { loc : "2d" } ); - -fast = db.runCommand( { geoNear : t.getName() , near : [ 50 , 50 ] , num : 10 } ); +fast = db.runCommand({geoNear: t.getName(), near: [50, 50], num: 10}); // test filter -filtered1 = db.runCommand( { geoNear : t.getName() , near : [ 50 , 50 ] , num : 10 , query : { a : 2 } } ); -assert.eq( 10 , filtered1.results.length , "B1" ); -filtered1.results.forEach( function(z){ assert.eq( 2 , z.obj.a , "B2: " + tojson( z ) ); } ); -//printjson( filtered1.stats ); +filtered1 = db.runCommand({geoNear: t.getName(), near: [50, 50], num: 10, query: {a: 2}}); +assert.eq(10, filtered1.results.length, "B1"); +filtered1.results.forEach(function(z) { + assert.eq(2, z.obj.a, "B2: " + tojson(z)); +}); +// printjson( filtered1.stats ); -function avgA( q , len ){ - if ( ! len ) +function avgA(q, len) { + if (!len) len = 10; - var realq = { loc : { $near : [ 50 , 50 ] } }; - if ( q ) - Object.extend( realq , q ); - var as = - t.find( realq ).limit(len).map( - function(z){ - return z.a; - } - ); - assert.eq( len , as.length , "length in avgA" ); - return Array.avg( as ); + var realq = { + loc: {$near: [50, 50]} + }; + if (q) + Object.extend(realq, q); + var as = t.find(realq).limit(len).map(function(z) { + return z.a; + }); + assert.eq(len, as.length, "length in avgA"); + return Array.avg(as); } -function testFiltering( msg ){ - assert.gt( 2 , avgA( {} ) , msg + " testFiltering 1 " ); - assert.eq( 2 , avgA( { a : 2 } ) , msg + " testFiltering 2 " ); - assert.eq( 4 , avgA( { a : 4 } ) , msg + " testFiltering 3 " ); +function testFiltering(msg) { + assert.gt(2, avgA({}), msg + " testFiltering 1 "); + assert.eq(2, avgA({a: 2}), msg + " testFiltering 2 "); + assert.eq(4, avgA({a: 4}), msg + " testFiltering 3 "); } -testFiltering( "just loc" ); - -t.dropIndex( { loc : "2d" } ); -assert.eq( 1 , t.getIndexKeys().length , "setup 3a" ); -t.ensureIndex( { loc : "2d" , a : 1 } ); -assert.eq( 2 , t.getIndexKeys().length , "setup 3b" ); +testFiltering("just loc"); -filtered2 = db.runCommand( { geoNear : t.getName() , near : [ 50 , 50 ] , num : 10 , query : { a : 2 } } ); -assert.eq( 10 , filtered2.results.length , "B3" ); -filtered2.results.forEach( function(z){ assert.eq( 2 , z.obj.a , "B4: " + tojson( z ) ); } ); +t.dropIndex({loc: "2d"}); +assert.eq(1, t.getIndexKeys().length, "setup 3a"); +t.ensureIndex({loc: "2d", a: 1}); +assert.eq(2, t.getIndexKeys().length, "setup 3b"); -assert.eq( filtered1.stats.avgDistance , filtered2.stats.avgDistance , "C1" ); -assert.gt( filtered1.stats.objectsLoaded , filtered2.stats.objectsLoaded , "C3" ); +filtered2 = db.runCommand({geoNear: t.getName(), near: [50, 50], num: 10, query: {a: 2}}); +assert.eq(10, filtered2.results.length, "B3"); +filtered2.results.forEach(function(z) { + assert.eq(2, z.obj.a, "B4: " + tojson(z)); +}); -testFiltering( "loc and a" ); +assert.eq(filtered1.stats.avgDistance, filtered2.stats.avgDistance, "C1"); +assert.gt(filtered1.stats.objectsLoaded, filtered2.stats.objectsLoaded, "C3"); -t.dropIndex( { loc : "2d" , a : 1 } ); -assert.eq( 1 , t.getIndexKeys().length , "setup 4a" ); -t.ensureIndex( { loc : "2d" , b : 1 } ); -assert.eq( 2 , t.getIndexKeys().length , "setup 4b" ); +testFiltering("loc and a"); -testFiltering( "loc and b" ); +t.dropIndex({loc: "2d", a: 1}); +assert.eq(1, t.getIndexKeys().length, "setup 4a"); +t.ensureIndex({loc: "2d", b: 1}); +assert.eq(2, t.getIndexKeys().length, "setup 4b"); +testFiltering("loc and b"); -q = { loc : { $near : [ 50 , 50 ] } }; -assert.eq( 100 , t.find( q ).limit(100).itcount() , "D1" ); -assert.eq( 100 , t.find( q ).limit(100).size() , "D2" ); +q = { + loc: {$near: [50, 50]} +}; +assert.eq(100, t.find(q).limit(100).itcount(), "D1"); +assert.eq(100, t.find(q).limit(100).size(), "D2"); -assert.eq( 20 , t.find( q ).limit(20).itcount() , "D3" ); -assert.eq( 20 , t.find( q ).limit(20).size() , "D4" ); +assert.eq(20, t.find(q).limit(20).itcount(), "D3"); +assert.eq(20, t.find(q).limit(20).size(), "D4"); // SERVER-14039 Wrong limit after skip with $nearSphere, 2d index -assert.eq( 10 , t.find( q ).skip(10).limit(10).itcount() , "D5" ); -assert.eq( 10 , t.find( q ).skip(10).limit(10).size() , "D6" ); +assert.eq(10, t.find(q).skip(10).limit(10).itcount(), "D5"); +assert.eq(10, t.find(q).skip(10).limit(10).size(), "D6"); |