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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
// SERVER-1089 Test and/or nesting
t = db.jstests_andor;
t.drop();
// not ok
function ok( q ) {
assert.eq( 1, t.find( q ).itcount() );
}
t.save( {a:1} );
test = function() {
ok( {a:1} );
ok( {$and:[{a:1}]} );
ok( {$or:[{a:1}]} );
ok( {$and:[{$and:[{a:1}]}]} );
ok( {$or:[{$or:[{a:1}]}]} );
ok( {$and:[{$or:[{a:1}]}]} );
ok( {$or:[{$and:[{a:1}]}]} );
ok( {$and:[{$and:[{$or:[{a:1}]}]}]} );
ok( {$and:[{$or:[{$and:[{a:1}]}]}]} );
ok( {$or:[{$and:[{$and:[{a:1}]}]}]} );
ok( {$or:[{$and:[{$or:[{a:1}]}]}]} );
// now test $nor
ok( {$and:[{a:1}]} );
ok( {$nor:[{a:2}]} );
ok( {$and:[{$and:[{a:1}]}]} );
ok( {$nor:[{$nor:[{a:1}]}]} );
ok( {$and:[{$nor:[{a:2}]}]} );
ok( {$nor:[{$and:[{a:2}]}]} );
ok( {$and:[{$and:[{$nor:[{a:2}]}]}]} );
ok( {$and:[{$nor:[{$and:[{a:2}]}]}]} );
ok( {$nor:[{$and:[{$and:[{a:2}]}]}]} );
ok( {$nor:[{$and:[{$nor:[{a:1}]}]}]} );
}
test();
t.ensureIndex( {a:1} );
test();
// Test an inequality base match.
test = function() {
ok( {a:{$ne:2}} );
ok( {$and:[{a:{$ne:2}}]} );
ok( {$or:[{a:{$ne:2}}]} );
ok( {$and:[{$and:[{a:{$ne:2}}]}]} );
ok( {$or:[{$or:[{a:{$ne:2}}]}]} );
ok( {$and:[{$or:[{a:{$ne:2}}]}]} );
ok( {$or:[{$and:[{a:{$ne:2}}]}]} );
ok( {$and:[{$and:[{$or:[{a:{$ne:2}}]}]}]} );
ok( {$and:[{$or:[{$and:[{a:{$ne:2}}]}]}]} );
ok( {$or:[{$and:[{$and:[{a:{$ne:2}}]}]}]} );
ok( {$or:[{$and:[{$or:[{a:{$ne:2}}]}]}]} );
// now test $nor
ok( {$and:[{a:{$ne:2}}]} );
ok( {$nor:[{a:{$ne:1}}]} );
ok( {$and:[{$and:[{a:{$ne:2}}]}]} );
ok( {$nor:[{$nor:[{a:{$ne:2}}]}]} );
ok( {$and:[{$nor:[{a:{$ne:1}}]}]} );
ok( {$nor:[{$and:[{a:{$ne:1}}]}]} );
ok( {$and:[{$and:[{$nor:[{a:{$ne:1}}]}]}]} );
ok( {$and:[{$nor:[{$and:[{a:{$ne:1}}]}]}]} );
ok( {$nor:[{$and:[{$and:[{a:{$ne:1}}]}]}]} );
ok( {$nor:[{$and:[{$nor:[{a:{$ne:2}}]}]}]} );
}
t.drop();
t.save( {a:1} );
test();
t.ensureIndex( {a:1} );
test();
t.drop();
t.ensureIndex( {a:1} );
var e = t.find( {$and:[{a:1}]} ).explain();
// nested non singleton $or clauses currently ignored for indexing
assert.eq( e.indexBounds, t.find( {$and:[{a:1,$or:[{a:2},{a:3}]}]} ).explain().indexBounds );
|