mirror of https://github.com/mongodb/mongo
38 lines
1.3 KiB
JavaScript
38 lines
1.3 KiB
JavaScript
/**
|
|
* Tests that an index properly reports multikeyness and multikey paths metadata in the presence of
|
|
* successful and unsuccessful inserts.
|
|
*/
|
|
(function() {
|
|
"use strict";
|
|
|
|
// For making assertions about explain output.
|
|
load("jstests/libs/analyze_plan.js");
|
|
|
|
const coll = db.getCollection("index_multikey");
|
|
coll.drop();
|
|
|
|
function getIndexScanExplainOutput() {
|
|
const explain = coll.find().hint({a: 1, b: 1}).explain();
|
|
assert.commandWorked(explain);
|
|
return getPlanStage(explain.queryPlanner.winningPlan, "IXSCAN");
|
|
}
|
|
|
|
assert.commandWorked(coll.createIndex({a: 1, b: 1}));
|
|
assert.commandWorked(coll.createIndex({"a.0.0": 1}));
|
|
let ixscan = getIndexScanExplainOutput();
|
|
assert.eq(
|
|
ixscan.isMultiKey, false, "empty index should not be marked multikey; plan: " + tojson(ixscan));
|
|
assert.eq(ixscan.multiKeyPaths,
|
|
{a: [], b: []},
|
|
"empty index should have no multiKeyPaths; plan: " + tojson(ixscan));
|
|
|
|
assert.commandWorked(coll.insert({a: [1, 2, 3]}));
|
|
ixscan = getIndexScanExplainOutput();
|
|
assert.eq(ixscan.isMultiKey,
|
|
true,
|
|
"index should have been marked as multikey after insert; plan: " + tojson(ixscan));
|
|
assert.eq(ixscan.multiKeyPaths,
|
|
{a: ["a"], b: []},
|
|
"index has wrong multikey paths after insert; plan: " + ixscan);
|
|
})();
|