The actual change is in src/mongo/shell/collection.js with the remaining changes
to adjust tests to the new api.
The "ideal" arguments are now an array of pipeline ops and an optional object
with extra top-level options for the command (such as {explain: true}. For
backwards compatibility, we still support the varargs style where each argument
is a pipeline stage, but there is no way to specify extra parameters in this
mode.
44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
// Value::coerceToBool() is consistent with BSONElement::trueValue(). SERVER-6120
|
|
|
|
t = db.jstests_aggregation_server6120;
|
|
t.drop();
|
|
|
|
t.save( {object: {a:1}} );
|
|
|
|
function coerceToBool( value ) {
|
|
return t.aggregate( { $project:{ boolValue:{ $and:[ value ] } } } ).toArray()[ 0 ].boolValue;
|
|
}
|
|
|
|
function assertBoolValue( expectedBool, value ) {
|
|
assert.eq( expectedBool, coerceToBool( value ) );
|
|
}
|
|
|
|
// Bool type.
|
|
assertBoolValue( false, false );
|
|
assertBoolValue( true, true );
|
|
|
|
// Numeric types.
|
|
assertBoolValue( false, NumberLong( 0 ) );
|
|
assertBoolValue( true, NumberLong( 1 ) );
|
|
assertBoolValue( false, NumberInt( 0 ) );
|
|
assertBoolValue( true, NumberInt( 1 ) );
|
|
assertBoolValue( false, 0.0 );
|
|
assertBoolValue( true, 1.0 );
|
|
|
|
// Always false types.
|
|
assertBoolValue( false, null );
|
|
|
|
// Always true types.
|
|
assertBoolValue( true, '' );
|
|
assertBoolValue( true, 'a' );
|
|
assertBoolValue( true, "$object" );
|
|
assertBoolValue( true, [] );
|
|
assertBoolValue( true, [ 1 ] );
|
|
assertBoolValue( true, new ObjectId() );
|
|
assertBoolValue( true, new Date() );
|
|
assertBoolValue( true, /a/ );
|
|
assertBoolValue( true, new Timestamp() );
|
|
|
|
// Missing field.
|
|
assertBoolValue( false, '$missingField' );
|