97 lines
2.9 KiB
JavaScript
97 lines
2.9 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);
|