t = db.jstests_js3; debug = function( s ){ //printjson( s ); } for( z = 0; z < 2; z++ ) { debug(z); t.drop(); if( z > 0 ) { t.ensureIndex({_id:1}); t.ensureIndex({i:1}); } for( i = 0; i < 1000; i++ ) t.save( { i:i, z: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" } ); assert( 33 == db.dbEval(function() { return 33; } ) ); db.dbEval( function() { db.jstests_js3.save({i:-1, z:"server side"}) } ); assert( t.findOne({i:-1}) ); assert( 2 == t.find( { $where : function(){ return obj.i == 7 || obj.i == 8; } } ).length() ); // NPE test var ok = false; try { var x = t.find( { $where : function(){ asdf.asdf.f.s.s(); } } ); debug( x.length() ); debug( tojson( x ) ); } catch(e) { ok = true; } debug( ok ); assert(ok); t.ensureIndex({z:1}); t.ensureIndex({q:1}); debug( "before indexed find" ); arr = t.find( { $where : function(){ return obj.i == 7 || obj.i == 8; } } ).toArray(); debug( arr ); assert.eq( 2, arr.length ); debug( "after indexed find" ); for( i = 1000; i < 2000; i++ ) t.save( { i:i, z: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" } ); assert( t.find().count() == 2001 ); assert( t.validate().valid ); debug( "done iter" ); }