t = db.null2; t.drop(); t.insert( { _id : 1, a : [ { b : 5 } ] } ); t.insert( { _id : 2, a : [ {} ] } ); t.insert( { _id : 3, a : [] } ); t.insert( { _id : 4, a : [ {}, { b : 5 } ] } ); t.insert( { _id : 5, a : [ 5, { b : 5 } ] } ); function doQuery( query ) { printjson( query ); t.find( query ).forEach( function(z) { print( "\t" + tojson(z) ); } ); return t.find( query ).count(); } function getIds( query ) { var ids = [] t.find( query ).forEach( function(z) { ids.push( z._id ); } ); return ids; } theQueries = [ { "a.b" : null }, { "a.b" : { $in : [ null ] } } ]; for ( var i=0; i < theQueries.length; i++ ) { assert.eq( 2, doQuery( theQueries[i] ) ); assert.eq( [2,4], getIds( theQueries[i] ) ); } t.ensureIndex( { "a.b" : 1 } ) for ( var i=0; i < theQueries.length; i++ ) { assert.eq( 2, doQuery( theQueries[i] ) ); assert.eq( [2,4], getIds( theQueries[i] ) ); }