summaryrefslogtreecommitdiff
path: root/jstests/coveredIndex1.js
diff options
context:
space:
mode:
authoragirbal <antoine@10gen.com>2011-01-20 16:26:55 -0800
committeragirbal <antoine@10gen.com>2011-01-21 14:49:19 -0800
commit5943d51891dbcd23f81710d20865fae35370e4dc (patch)
treeecabe7c7a92c822e4e16d78e211c902960c28797 /jstests/coveredIndex1.js
parent609f7211c24339341c8ebb977aa9378cc4ec05b3 (diff)
downloadmongo-5943d51891dbcd23f81710d20865fae35370e4dc.tar.gz
more cases for covered index test
Diffstat (limited to 'jstests/coveredIndex1.js')
-rw-r--r--jstests/coveredIndex1.js40
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);