44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
|
|
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());
|