diff options
Diffstat (limited to 'scripting/v8_db.cpp')
-rw-r--r-- | scripting/v8_db.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/scripting/v8_db.cpp b/scripting/v8_db.cpp index 5752fde..e178875 100644 --- a/scripting/v8_db.cpp +++ b/scripting/v8_db.cpp @@ -297,7 +297,7 @@ namespace mongo { } v8::Handle<v8::Value> mongoRemove(const v8::Arguments& args){ - jsassert( args.Length() == 2 , "remove needs 2 args" ); + jsassert( args.Length() == 2 || args.Length() == 3 , "remove needs 2 args" ); jsassert( args[1]->IsObject() , "have to remove an object template" ); DBClientBase * conn = getConnection( args ); @@ -306,10 +306,15 @@ namespace mongo { v8::Handle<v8::Object> in = args[1]->ToObject(); BSONObj o = v8ToMongo( in ); + bool justOne = false; + if ( args.Length() > 2 ){ + justOne = args[2]->BooleanValue(); + } + DDD( "want to remove : " << o.jsonString() ); try { v8::Unlocker u; - conn->remove( ns , o ); + conn->remove( ns , o , justOne ); } catch ( ... ){ return v8::ThrowException( v8::String::New( "socket error on remove" ) ); @@ -714,11 +719,14 @@ namespace mongo { v8::Handle<v8::Object> it = args.This(); stringstream ss; - if ( !it->Has( v8::String::New( "top" ) ) ) { - ss << "NumberLong( " << it->Get( v8::String::New( "floatApprox" ) )->NumberValue() << " )"; - } else { - ss << "NumberLong( \"" << numberLongVal( it ) << "\" )"; - } + long long val = numberLongVal( it ); + const long long limit = 2LL << 30; + + if ( val <= -limit || limit <= val ) + ss << "NumberLong(\"" << val << "\")"; + else + ss << "NumberLong(" << val << ")"; + string ret = ss.str(); return v8::String::New( ret.c_str() ); } |