mongo/jstests/core/arrayfind1.js

34 lines
1.0 KiB
JavaScript

// @tags: [requires_fastcount]
t = db.arrayfind1;
t.drop();
t.save({a: [{x: 1}]});
t.save({a: [{x: 1, y: 2, z: 1}]});
t.save({a: [{x: 1, y: 1, z: 3}]});
function test(exptected, q, name) {
assert.eq(exptected, t.find(q).itcount(), name + " " + tojson(q) + " itcount");
assert.eq(exptected, t.find(q).count(), name + " " + tojson(q) + " count");
}
test(3, {}, "A1");
test(1, {"a.y": 2}, "A2");
test(1, {"a": {x: 1}}, "A3");
test(3, {"a": {$elemMatch: {x: 1}}}, "A4"); // SERVER-377
t.save({a: [{x: 2}]});
t.save({a: [{x: 3}]});
t.save({a: [{x: 4}]});
assert.eq(1, t.find({a: {$elemMatch: {x: 2}}}).count(), "B1");
assert.eq(2, t.find({a: {$elemMatch: {x: {$gt: 2}}}}).count(), "B2");
t.ensureIndex({"a.x": 1});
assert.eq(1, t.find({a: {$elemMatch: {x: 2}}}).count(), "D1");
assert.eq(3, t.find({"a.x": 1}).count(), "D2.1");
assert.eq(3, t.find({"a.x": {$gt: 1}}).count(), "D2.2");
assert.eq(2, t.find({a: {$elemMatch: {x: {$gt: 2}}}}).count(), "D3");
assert.eq(2, t.find({a: {$ne: 2, $elemMatch: {x: {$gt: 2}}}}).count(), "E1");