diff options
author | agirbal <antoine@10gen.com> | 2011-01-20 16:26:55 -0800 |
---|---|---|
committer | agirbal <antoine@10gen.com> | 2011-01-21 14:49:19 -0800 |
commit | 5943d51891dbcd23f81710d20865fae35370e4dc (patch) | |
tree | ecabe7c7a92c822e4e16d78e211c902960c28797 | |
parent | 609f7211c24339341c8ebb977aa9378cc4ec05b3 (diff) | |
download | mongo-5943d51891dbcd23f81710d20865fae35370e4dc.tar.gz |
more cases for covered index test
-rw-r--r-- | jstests/coveredIndex1.js | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/jstests/coveredIndex1.js b/jstests/coveredIndex1.js index bf72d806c88..bd66e7c5d4d 100644 --- a/jstests/coveredIndex1.js +++ b/jstests/coveredIndex1.js @@ -3,11 +3,47 @@ t = db["users"]; t.remove( {} ); t.save({fn: "john", ln: "doe"}) -t.ensureIndex({ln: 1}); +t.save({fn: "jack", ln: "doe"}) +t.save({fn: "john", ln: "smith"}) +t.save({fn: "jack", ln: "black"}) +t.save({fn: "bob", ln: "murray"}) +assert.eq( t.findOne({ln: "doe"}).fn, "john", "Cannot find right record" ); +assert.eq( t.find({}).length, 5, "Not right length" ); -assert( t.findOne({ln: "doe"}).fn == "john", "Cannot find right record" ); +// use simple index +t.ensureIndex({ln: 1}); assert.eq( t.find({ln: "doe"}).explain().indexOnly, false, "Find using covered index but all fields are returned"); assert.eq( t.find({ln: "doe"}, {ln: 1}).explain().indexOnly, false, "Find using covered index but _id is returned"); assert.eq( t.find({ln: "doe"}, {ln: 1, _id: 0}).explain().indexOnly, true, "Find is not using covered index"); + +// use compound index +t.dropIndex({ln: 1}) +t.ensureIndex({ln: 1, fn: 1}); +// return 1 field +assert.eq( t.find({ln: "doe"}, {ln: 1, _id: 0}).explain().indexOnly, true, "Find is not using covered index"); +// return both fields, multiple docs returned +assert.eq( t.find({ln: "doe"}, {ln: 1, fn: 1, _id: 0}).explain().indexOnly, true, "Find is not using covered index"); +// match 1 record using both fields +assert.eq( t.find({ln: "doe", fn: "john"}, {ln: 1, fn: 1, _id: 0}).explain().indexOnly, true, "Find is not using covered index"); +// change ordering +assert.eq( t.find({fn: "john", ln: "doe"}, {fn: 1, ln: 1, _id: 0}).explain().indexOnly, true, "Find is not using covered index"); +// ask from 2nd index key +assert.eq( t.find({fn: "john"}, {fn: 1, _id: 0}).explain().indexOnly, false, "Find is using covered index, but doesnt have 1st key"); + +// repeat above but with _id field +t.dropIndex({ln: 1}) +t.ensureIndex({ln: 1, fn: 1}); +// return 1 field +assert.eq( t.find({ln: "doe"}, {ln: 1, _id: 0}).explain().indexOnly, true, "Find is not using covered index"); +// return both fields, multiple docs returned +assert.eq( t.find({ln: "doe"}, {ln: 1, fn: 1, _id: 0}).explain().indexOnly, true, "Find is not using covered index"); +// match 1 record using both fields +assert.eq( t.find({ln: "doe", fn: "john"}, {ln: 1, fn: 1, _id: 0}).explain().indexOnly, true, "Find is not using covered index"); +// change ordering +assert.eq( t.find({fn: "john", ln: "doe"}, {fn: 1, ln: 1, _id: 0}).explain().indexOnly, true, "Find is not using covered index"); +// ask from 2nd index key +assert.eq( t.find({fn: "john"}, {fn: 1, _id: 0}).explain().indexOnly, false, "Find is using covered index, but doesnt have 1st key"); + + assert(t.validate().valid); |