summaryrefslogtreecommitdiff
path: root/jstests/core/index_elemmatch1.js
blob: fb3bd5e76b49c2caafd07433d546e2835bc2d566 (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
36
37
38
39
40
41
42
43

t = db.index_elemmatch1;
t.drop();

x = 0;
y = 0;
var bulk = t.initializeUnorderedBulkOp();
for ( a=0; a<100; a++ ){
    for ( b=0; b<100; b++ ){
        bulk.insert( { a : a , b : b % 10 , arr : [ { x : x++ % 10 , y : y++ % 10 } ] } );
    }
}
assert.writeOK(bulk.execute());

t.ensureIndex( { a : 1 , b : 1 } );
t.ensureIndex( { "arr.x" : 1 , a : 1 } );

assert.eq( 100 , t.find( { a : 55 } ).itcount() , "A1" );
assert.eq( 10 , t.find( { a : 55 , b : 7 } ).itcount() , "A2" );

q = { a : 55 , b : { $in : [ 1 , 5 , 8 ] } };
assert.eq( 30 , t.find( q ).itcount() , "A3" );

q.arr = { $elemMatch : { x : 5 , y : 5 } };
assert.eq( 10 , t.find( q ).itcount() , "A4" );

function nscannedForCursor( explain, cursor ) {
    plans = explain.allPlans;
    for( i in plans ) {
        if ( plans[ i ].cursor == cursor ) {
            return plans[ i ].nscanned;
        }
    }
    return -1;
}

var explain = t.find(q).hint( { "arr.x" : 1 , a : 1 } ).explain("executionStats");
assert.eq( t.find(q).itcount(), explain.executionStats.totalKeysExamined );

printjson(t.find(q).explain());
print("Num results:");
assert.eq(10, t.find(q).itcount());
printjson(t.find(q).itcount());