t = db.fm3; t.drop(); t.insert({a: [{c: {e: 1, f: 1}}, {d: 2}, 'z'], b: 1}); res = t.findOne({}, {a: 1}); assert.eq(res.a, [{c: {e: 1, f: 1}}, {d: 2}, 'z'], "one a"); assert.eq(res.b, undefined, "one b"); res = t.findOne({}, {a: 0}); assert.eq(res.a, undefined, "two a"); assert.eq(res.b, 1, "two b"); res = t.findOne({}, {'a.d': 1}); assert.eq(res.a, [{}, {d: 2}], "three a"); assert.eq(res.b, undefined, "three b"); res = t.findOne({}, {'a.d': 0}); assert.eq(res.a, [{c: {e: 1, f: 1}}, {}, 'z'], "four a"); assert.eq(res.b, 1, "four b"); res = t.findOne({}, {'a.c': 1}); assert.eq(res.a, [{c: {e: 1, f: 1}}, {}], "five a"); assert.eq(res.b, undefined, "five b"); res = t.findOne({}, {'a.c': 0}); assert.eq(res.a, [{}, {d: 2}, 'z'], "six a"); assert.eq(res.b, 1, "six b"); res = t.findOne({}, {'a.c.e': 1}); assert.eq(res.a, [{c: {e: 1}}, {}], "seven a"); assert.eq(res.b, undefined, "seven b"); res = t.findOne({}, {'a.c.e': 0}); assert.eq(res.a, [{c: {f: 1}}, {d: 2}, 'z'], "eight a"); assert.eq(res.b, 1, "eight b");