// projecting a non-existent subfield should work as it does in a query with projection c = db.c; c.drop(); c.save({a:[1]}); c.save({a:{c:1}}); c.save({a:[{c:1},{b:1,c:1},{c:1}]}); c.save({a:1}); c.save({b:1}); // assert the aggregation and the query produce the same thing assert.eq(c.aggregate({$project:{'a.b':1}}).toArray(), c.find({}, {'a.b':1}).toArray());