Database
[{"myShoppingList":[{"type":"TYPE1","someOtherAttribute":"testValue1"},{"type":null,"someOtherAttribute":"testValue2"}]},{"myShoppingList":[{"type":"TYPE1","someOtherAttribute":"testValue1"},{"type":"TYPE2",/** value 'TYPE2' is present here so not interested*/"someOtherAttribute":"testValue1"},{"type":null,"someOtherAttribute":"testValue2"}]},{"myShoppingList":[{"someOtherAttribute":"testValue1"/** no type value present*/},{"type":null,"someOtherAttribute":"testValue1"/** and type is null here*/}]},{"noShippingList":1},{"myShoppingList":[]}]
Query
db.collection.find({myShoppingList:{$elemMatch:{$and:[{"type":{$ne:"TYPE2"}},{"type":{$ne:null}}]},$not:{$elemMatch:{type:"TYPE2"}}}})