mongo/jstests/core/andor.js

96 lines
2.0 KiB
JavaScript

// 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();