Files
mongo/jstests/core/geo_or.js
Randolph Tan 5595b94560 SERVER-12127 migrate js tests to jscore suite when not related to writes
Moved test jstest/[a-i].js -> jstests/core/ and made changes to comply with write command api
2014-02-28 16:26:33 -05:00

63 lines
2.5 KiB
JavaScript

// multiple geo clauses with $or
t = db.geoor;
t.drop();
var p = [-71.34895, 42.46037];
var q = [1.48736, 42.55327];
t.save({loc: p});
t.save({loc: q});
var indexname = "2dsphere";
t.ensureIndex({loc: indexname})
assert.eq(1, t.find({loc: p}).itcount(), indexname);
// $or supports at most one $near clause
assert.eq(2, t.find({$or: [{loc: {$nearSphere: p}}]}).itcount(),
'geo query not supported by $or. index type: ' + indexname);
assert.throws(function() {
assert.eq(2, t.find({$or: [{loc: {$nearSphere: p}},
{loc: {$nearSphere: q}}]}).itcount(),
'geo query not supported by $or. index type: ' + indexname);
}, null, '$or with multiple $near clauses');
// the following tests should match the points in the collection
assert.eq(2, t.find({$or: [
{loc: {$geoWithin: {$centerSphere: [p, 10]}}},
{loc: {$geoWithin: {$centerSphere: [p, 10]}}}
]}).itcount(),
'multiple $geoWithin clauses not supported by $or. index type: ' + indexname);
assert.eq(2, t.find({$or: [
{loc: {$geoIntersects: {$geometry: {type: 'LineString', coordinates: [p, q]}}}},
{loc: {$geoIntersects: {$geometry: {type: 'LineString',
coordinates: [[0,0], [1,1]]}}}}
]}).itcount(),
'multiple $geoIntersects LineString clauses not supported by $or. index type: ' + indexname);
assert.eq(2, t.find({$or: [
{loc: {$geoIntersects: {$geometry: {type: 'Point', coordinates: p}}}},
{loc: {$geoIntersects: {$geometry: {type: 'Point', coordinates: q}}}}
]}).itcount(),
'multiple $geoIntersects Point clauses not supported by $or. index type: ' + indexname);
assert.eq(2, t.find({$or: [
{loc: {$geoIntersects: {$geometry: {type: 'Polygon',
coordinates: [[[0, 0], p, q, [0, 0]]]}}}},
{loc: {$geoIntersects: {$geometry:
{type: 'Polygon', coordinates: [[[0, 0], [1, 1], [0, 1], [0, 0]]]}}}}
]}).itcount(),
'multiple $geoIntersects Polygon clauses not supported by $or. index type: ' + indexname);
t.dropIndexes();
var indexname = "2d";
t.ensureIndex({loc: indexname})
assert.eq(2, t.find({$or: [{loc: {$geoWithin: {$centerSphere: [p, 10]}}},
{loc: {$geoWithin: {$centerSphere: [p, 10]}}}]}).itcount(),
'multiple $geoWithin clauses not supported by $or. index type: ' + indexname);