mirror of https://github.com/mongodb/mongo
62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
// @tags: [requires_fastcount]
|
|
|
|
t = db.jstests_nin;
|
|
t.drop();
|
|
|
|
function checkEqual(name, key, value) {
|
|
var o = {};
|
|
o[key] = {$in: [value]};
|
|
var i = t.find(o).count();
|
|
o[key] = {$nin: [value]};
|
|
var n = t.find(o).count();
|
|
|
|
assert.eq(t.find().count(),
|
|
i + n,
|
|
"checkEqual " + name + " $in + $nin != total | " + i + " + " + n +
|
|
" != " + t.find().count());
|
|
}
|
|
|
|
doTest = function(n) {
|
|
t.save({a: [1, 2, 3]});
|
|
t.save({a: [1, 2, 4]});
|
|
t.save({a: [1, 8, 5]});
|
|
t.save({a: [1, 8, 6]});
|
|
t.save({a: [1, 9, 7]});
|
|
|
|
assert.eq(5, t.find({a: {$nin: [10]}}).count(), n + " A");
|
|
assert.eq(0, t.find({a: {$ne: 1}}).count(), n + " B");
|
|
assert.eq(0, t.find({a: {$nin: [1]}}).count(), n + " C");
|
|
assert.eq(0, t.find({a: {$nin: [1, 2]}}).count(), n + " D");
|
|
assert.eq(3, t.find({a: {$nin: [2]}}).count(), n + " E");
|
|
assert.eq(3, t.find({a: {$nin: [8]}}).count(), n + " F");
|
|
assert.eq(4, t.find({a: {$nin: [9]}}).count(), n + " G");
|
|
assert.eq(4, t.find({a: {$nin: [3]}}).count(), n + " H");
|
|
assert.eq(3, t.find({a: {$nin: [2, 3]}}).count(), n + " I");
|
|
assert.eq(1, t.find({a: {$ne: 8, $nin: [2, 3]}}).count(), n + " I2");
|
|
|
|
checkEqual(n + " A", "a", 5);
|
|
|
|
t.save({a: [2, 2]});
|
|
assert.eq(3, t.find({a: {$nin: [2, 2]}}).count(), n + " J");
|
|
|
|
t.save({a: [[2]]});
|
|
assert.eq(4, t.find({a: {$nin: [2]}}).count(), n + " K");
|
|
|
|
t.save({a: [{b: [10, 11]}, 11]});
|
|
checkEqual(n + " B", "a", 5);
|
|
checkEqual(n + " C", "a.b", 5);
|
|
|
|
assert.eq(7, t.find({'a.b': {$nin: [10]}}).count(), n + " L");
|
|
assert.eq(7, t.find({'a.b': {$nin: [[10, 11]]}}).count(), n + " M");
|
|
assert.eq(7, t.find({a: {$nin: [11]}}).count(), n + " N");
|
|
|
|
t.save({a: {b: [20, 30]}});
|
|
assert.eq(1, t.find({'a.b': {$all: [20]}}).count(), n + " O");
|
|
assert.eq(1, t.find({'a.b': {$all: [20, 30]}}).count(), n + " P");
|
|
};
|
|
|
|
doTest("no index");
|
|
t.drop();
|
|
t.ensureIndex({a: 1});
|
|
doTest("with index");
|