summaryrefslogtreecommitdiff
path: root/jstests/core/distinct_multikey.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/distinct_multikey.js')
-rw-r--r--jstests/core/distinct_multikey.js166
1 files changed, 83 insertions, 83 deletions
diff --git a/jstests/core/distinct_multikey.js b/jstests/core/distinct_multikey.js
index 77aba774a1c..72acd2c342c 100644
--- a/jstests/core/distinct_multikey.js
+++ b/jstests/core/distinct_multikey.js
@@ -2,102 +2,102 @@
* Tests for distinct planning and execution in the presence of multikey indexes.
*/
(function() {
- "use strict";
+"use strict";
- load("jstests/libs/analyze_plan.js");
+load("jstests/libs/analyze_plan.js");
- let coll = db.jstest_distinct_multikey;
- coll.drop();
- assert.commandWorked(coll.createIndex({a: 1}));
- assert.writeOK(coll.insert({a: [1, 2, 3]}));
- assert.writeOK(coll.insert({a: [2, 3, 4]}));
- assert.writeOK(coll.insert({a: [5, 6, 7]}));
+let coll = db.jstest_distinct_multikey;
+coll.drop();
+assert.commandWorked(coll.createIndex({a: 1}));
+assert.writeOK(coll.insert({a: [1, 2, 3]}));
+assert.writeOK(coll.insert({a: [2, 3, 4]}));
+assert.writeOK(coll.insert({a: [5, 6, 7]}));
- // Test that distinct can correctly use a multikey index when there is no predicate.
- let result = coll.distinct("a");
- assert.eq([1, 2, 3, 4, 5, 6, 7], result.sort());
- let explain = coll.explain("queryPlanner").distinct("a");
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_COVERED"));
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
+// Test that distinct can correctly use a multikey index when there is no predicate.
+let result = coll.distinct("a");
+assert.eq([1, 2, 3, 4, 5, 6, 7], result.sort());
+let explain = coll.explain("queryPlanner").distinct("a");
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_COVERED"));
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
- // Test that distinct can correctly use a multikey index when there is a predicate. This query
- // should not be eligible for the distinct scan and cannot be covered.
- result = coll.distinct("a", {a: 3});
- assert.eq([1, 2, 3, 4], result.sort());
- explain = coll.explain("queryPlanner").distinct("a", {a: 3});
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "FETCH"));
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "IXSCAN"));
+// Test that distinct can correctly use a multikey index when there is a predicate. This query
+// should not be eligible for the distinct scan and cannot be covered.
+result = coll.distinct("a", {a: 3});
+assert.eq([1, 2, 3, 4], result.sort());
+explain = coll.explain("queryPlanner").distinct("a", {a: 3});
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "FETCH"));
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "IXSCAN"));
- // Test distinct over a dotted multikey field, with a predicate.
- coll.drop();
- assert.commandWorked(coll.createIndex({"a.b": 1}));
- assert.writeOK(coll.insert({a: {b: [1, 2, 3]}}));
- assert.writeOK(coll.insert({a: {b: [2, 3, 4]}}));
+// Test distinct over a dotted multikey field, with a predicate.
+coll.drop();
+assert.commandWorked(coll.createIndex({"a.b": 1}));
+assert.writeOK(coll.insert({a: {b: [1, 2, 3]}}));
+assert.writeOK(coll.insert({a: {b: [2, 3, 4]}}));
- result = coll.distinct("a.b", {"a.b": 3});
- assert.eq([1, 2, 3, 4], result.sort());
- explain = coll.explain("queryPlanner").distinct("a.b", {"a.b": 3});
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "FETCH"));
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "IXSCAN"));
+result = coll.distinct("a.b", {"a.b": 3});
+assert.eq([1, 2, 3, 4], result.sort());
+explain = coll.explain("queryPlanner").distinct("a.b", {"a.b": 3});
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "FETCH"));
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "IXSCAN"));
- // Test that the distinct scan can be used when there is a predicate and the index is not
- // multikey.
- coll.drop();
- assert.commandWorked(coll.createIndex({a: 1}));
- assert.writeOK(coll.insert({a: 1}));
- assert.writeOK(coll.insert({a: 2}));
- assert.writeOK(coll.insert({a: 3}));
+// Test that the distinct scan can be used when there is a predicate and the index is not
+// multikey.
+coll.drop();
+assert.commandWorked(coll.createIndex({a: 1}));
+assert.writeOK(coll.insert({a: 1}));
+assert.writeOK(coll.insert({a: 2}));
+assert.writeOK(coll.insert({a: 3}));
- result = coll.distinct("a", {a: {$gte: 2}});
- assert.eq([2, 3], result.sort());
- explain = coll.explain("queryPlanner").distinct("a", {a: {$gte: 2}});
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_COVERED"));
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
+result = coll.distinct("a", {a: {$gte: 2}});
+assert.eq([2, 3], result.sort());
+explain = coll.explain("queryPlanner").distinct("a", {a: {$gte: 2}});
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_COVERED"));
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
- // Test a distinct which can use a multikey index, where the field being distinct'ed is not
- // multikey.
- coll.drop();
- assert.commandWorked(coll.createIndex({a: 1, b: 1}));
- assert.writeOK(coll.insert({a: 1, b: [2, 3]}));
- assert.writeOK(coll.insert({a: 8, b: [3, 4]}));
- assert.writeOK(coll.insert({a: 7, b: [4, 5]}));
+// Test a distinct which can use a multikey index, where the field being distinct'ed is not
+// multikey.
+coll.drop();
+assert.commandWorked(coll.createIndex({a: 1, b: 1}));
+assert.writeOK(coll.insert({a: 1, b: [2, 3]}));
+assert.writeOK(coll.insert({a: 8, b: [3, 4]}));
+assert.writeOK(coll.insert({a: 7, b: [4, 5]}));
- result = coll.distinct("a", {a: {$gte: 2}});
- assert.eq([7, 8], result.sort());
- explain = coll.explain("queryPlanner").distinct("a", {a: {$gte: 2}});
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_COVERED"));
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
+result = coll.distinct("a", {a: {$gte: 2}});
+assert.eq([7, 8], result.sort());
+explain = coll.explain("queryPlanner").distinct("a", {a: {$gte: 2}});
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_COVERED"));
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
- // Test distinct over a trailing multikey field.
- result = coll.distinct("b", {a: {$gte: 2}});
- assert.eq([3, 4, 5], result.sort());
- explain = coll.explain("queryPlanner").distinct("b", {a: {$gte: 2}});
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "FETCH"));
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "IXSCAN"));
+// Test distinct over a trailing multikey field.
+result = coll.distinct("b", {a: {$gte: 2}});
+assert.eq([3, 4, 5], result.sort());
+explain = coll.explain("queryPlanner").distinct("b", {a: {$gte: 2}});
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "FETCH"));
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "IXSCAN"));
- // Test distinct over a trailing non-multikey field, where the leading field is multikey.
- coll.drop();
- assert.commandWorked(coll.createIndex({a: 1, b: 1}));
- assert.writeOK(coll.insert({a: [2, 3], b: 1}));
- assert.writeOK(coll.insert({a: [3, 4], b: 8}));
- assert.writeOK(coll.insert({a: [3, 5], b: 7}));
+// Test distinct over a trailing non-multikey field, where the leading field is multikey.
+coll.drop();
+assert.commandWorked(coll.createIndex({a: 1, b: 1}));
+assert.writeOK(coll.insert({a: [2, 3], b: 1}));
+assert.writeOK(coll.insert({a: [3, 4], b: 8}));
+assert.writeOK(coll.insert({a: [3, 5], b: 7}));
- result = coll.distinct("b", {a: 3});
- assert.eq([1, 7, 8], result.sort());
- explain = coll.explain("queryPlanner").distinct("b", {a: 3});
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_COVERED"));
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
+result = coll.distinct("b", {a: 3});
+assert.eq([1, 7, 8], result.sort());
+explain = coll.explain("queryPlanner").distinct("b", {a: 3});
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_COVERED"));
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
- // Test distinct over a trailing non-multikey dotted path where the leading field is multikey.
- coll.drop();
- assert.commandWorked(coll.createIndex({a: 1, "b.c": 1}));
- assert.writeOK(coll.insert({a: [2, 3], b: {c: 1}}));
- assert.writeOK(coll.insert({a: [3, 4], b: {c: 8}}));
- assert.writeOK(coll.insert({a: [3, 5], b: {c: 7}}));
+// Test distinct over a trailing non-multikey dotted path where the leading field is multikey.
+coll.drop();
+assert.commandWorked(coll.createIndex({a: 1, "b.c": 1}));
+assert.writeOK(coll.insert({a: [2, 3], b: {c: 1}}));
+assert.writeOK(coll.insert({a: [3, 4], b: {c: 8}}));
+assert.writeOK(coll.insert({a: [3, 5], b: {c: 7}}));
- result = coll.distinct("b.c", {a: 3});
- assert.eq([1, 7, 8], result.sort());
- explain = coll.explain("queryPlanner").distinct("b.c", {a: 3});
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_DEFAULT"));
- assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
+result = coll.distinct("b.c", {a: 3});
+assert.eq([1, 7, 8], result.sort());
+explain = coll.explain("queryPlanner").distinct("b.c", {a: 3});
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "PROJECTION_DEFAULT"));
+assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN"));
}());