// 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());