32 lines
1.3 KiB
JavaScript
32 lines
1.3 KiB
JavaScript
// test passing hint to the count cmd
|
|
// hints are ignored if there is no query predicate
|
|
t = db.jstests_count_hint;
|
|
t.drop();
|
|
|
|
t.save( { i: 1 } );
|
|
t.save( { i: 2 } );
|
|
assert.eq( 2, t.find().count() );
|
|
|
|
t.ensureIndex( { i:1 } );
|
|
|
|
assert.eq( 1, t.find( { i: 1 } ).hint( "_id_" ).count(), "A" );
|
|
assert.eq( 2, t.find().hint( "_id_" ).count(), "B" );
|
|
assert.throws( function() { t.find( { i: 1 } ).hint( "BAD HINT" ).count(); } );
|
|
|
|
// create a sparse index which should have no entries
|
|
t.ensureIndex( { x:1 }, { sparse:true } );
|
|
|
|
assert.eq( 0, t.find( { i: 1 } ).hint( "x_1" ).count(), "C" );
|
|
assert.eq( 2, t.find().hint( "x_1" ).count(), "D" );
|
|
|
|
// SERVER-14799: Should be able to pass the hint as a document (not only as a string).
|
|
assert.eq( 0, t.find( { i: 1 } ).hint( { x: 1 } ).count(), "E" );
|
|
assert.eq( 2, t.find().hint( { x: 1 } ).count(), "F" );
|
|
assert.eq( 1, t.find( { i: 1 } ).hint( { _id: 1 } ).count(), "G" );
|
|
assert.throws( function() { t.find( { i: 1 } ).hint( { bad: 1, hint: 1 } ).count(); } );
|
|
|
|
// SERVER-14792: bad hints should cause the count to fail, even if there is no query predicate.
|
|
assert.eq( 2, t.find().hint( { i: 1 } ).count(), "H" );
|
|
assert.throws( function() { t.find().hint( { bad: 1, hint: 1 } ).count() } );
|
|
assert.throws( function() { t.find().hint( "BAD HINT" ).count() } );
|