summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
Diffstat (limited to 'jstests')
-rw-r--r--jstests/core/index2.js93
1 files changed, 46 insertions, 47 deletions
diff --git a/jstests/core/index2.js b/jstests/core/index2.js
index 2c37c48c871..5cfbb2f1590 100644
--- a/jstests/core/index2.js
+++ b/jstests/core/index2.js
@@ -1,52 +1,51 @@
-/**test indexing where the key is an embedded object.
+/**
+ * Test indexing where the key is an embedded object.
*/
-t = db.embeddedIndexTest2;
+(function() {
+'use strict';
+let t = db.index2_without_index;
t.drop();
-assert(t.findOne() == null);
-o = {
- name: "foo",
- z: {a: 17}
-};
-p = {
- name: "foo",
- z: {a: 17}
-};
-q = {
- name: "barrr",
- z: {a: 18}
-};
-r = {
- name: "barrr",
- z: {k: "zzz", L: [1, 2]}
-};
-
-t.save(o);
-
-assert(t.findOne().z.a == 17);
-
-t.save(p);
-t.save(q);
-
-assert(t.findOne({z: {a: 17}}).z.a == 17);
-assert(t.find({z: {a: 17}}).length() == 2);
-assert(t.find({z: {a: 18}}).length() == 1);
-
-t.save(r);
-
-assert(t.findOne({z: {a: 17}}).z.a == 17);
-assert(t.find({z: {a: 17}}).length() == 2);
-assert(t.find({z: {a: 18}}).length() == 1);
-
-t.createIndex({z: 1});
-
-assert(t.findOne({z: {a: 17}}).z.a == 17);
-assert(t.find({z: {a: 17}}).length() == 2);
-assert(t.find({z: {a: 18}}).length() == 1);
-
-assert(t.find().sort({z: 1}).length() == 4);
-assert(t.find().sort({z: -1}).length() == 4);
-
-assert(t.validate().valid);
+assert.eq(t.findOne(), null);
+
+const docs = [
+ {_id: 0, name: "foo", z: {a: 17}},
+ {_id: 1, name: "foo", z: {a: 17}},
+ {_id: 2, name: "barrr", z: {a: 18}},
+ {_id: 3, name: "barrr", z: {k: "zzz", L: [1, 2]}},
+];
+
+assert.commandWorked(t.insert(docs[0]));
+assert.eq(t.findOne().z.a, 17);
+
+// We will reuse these predicates to check the effect of
+// additional inserts and indexes on our query results.
+assert.commandWorked(t.insert(docs.slice(1, 3)));
+assert.eq(t.findOne({z: {a: 17}}).z.a, 17);
+assert.eq(t.countDocuments({z: {a: 17}}), 2);
+assert.eq(t.countDocuments({z: {a: 18}}), 1);
+
+// Inserting document with key that does not match any of our
+// predicates.
+assert.commandWorked(t.insert(docs.slice(3)));
+assert.eq(t.findOne({z: {a: 17}}).z.a, 17);
+assert.eq(t.countDocuments({z: {a: 17}}), 2);
+assert.eq(t.countDocuments({z: {a: 18}}), 1);
+
+// Adding an index should not change results.
+t = db.index2_with_index;
+t.drop();
+assert.commandWorked(t.createIndex({z: 1}));
+assert.commandWorked(t.insert(docs));
+assert.eq(t.findOne({z: {a: 17}}).z.a, 17);
+assert.eq(t.countDocuments({z: {a: 17}}), 2);
+assert.eq(t.countDocuments({z: {a: 18}}), 1);
+
+// Providing a sort preference should not change resutls.
+const sortedDocsAscending = t.find().sort({z: 1});
+assert.eq(sortedDocsAscending.length(), 4, tojson(sortedDocsAscending.toArray()));
+const sortedDocsDescending = t.find().sort({z: -1});
+assert.eq(sortedDocsDescending.length(), 4, tojson(sortedDocsDescending.toArray()));
+})();