summaryrefslogtreecommitdiff
path: root/jstests/core/arrayfind1.js
blob: 4e9330549ae7b3e7f85d5a7c69ef60962e7a1433 (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
33
34
35
// @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.createIndex({"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");