summaryrefslogtreecommitdiff
path: root/jstests/core/indexn.js
blob: 014ba050cbc2a0a282de31944ca830dc38de73b9 (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
// Test "impossible match" queries, or queries that will always have
// an empty result set.
// @tags: [
//   sbe_incompatible,
// ]

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

t.save({a: 1, b: [1, 2]});

t.ensureIndex({a: 1});
t.ensureIndex({b: 1});

// {a:1} is a single key index, so no matches are possible for this query
assert.eq(0, t.count({a: {$gt: 5, $lt: 0}}));

assert.eq(0, t.count({a: {$gt: 5, $lt: 0}, b: 2}));

assert.eq(0, t.count({a: {$gt: 5, $lt: 0}, b: {$gt: 0, $lt: 5}}));

// One clause of an $or is an "impossible match"
printjson(t.find({$or: [{a: {$gt: 5, $lt: 0}}, {a: 1}]}).explain());
assert.eq(1, t.count({$or: [{a: {$gt: 5, $lt: 0}}, {a: 1}]}));

// One clause of an $or is an "impossible match"; original order of the $or
// does not matter.
printjson(t.find({$or: [{a: 1}, {a: {$gt: 5, $lt: 0}}]}).explain());
assert.eq(1, t.count({$or: [{a: 1}, {a: {$gt: 5, $lt: 0}}]}));

t.save({a: 2});
assert.eq(2, t.count({$or: [{a: 1}, {a: {$gt: 5, $lt: 0}}, {a: 2}]}));