// @tags: [ // does_not_support_stepdowns, // ] /** * Tests that the explain output for $match reflects any optimizations. */ (function() { "use strict"; load("jstests/libs/analyze_plan.js"); const coll = db.match_explain; coll.drop(); assert.commandWorked(coll.insert({a: 1, b: 1})); assert.commandWorked(coll.insert({a: 2, b: 3})); assert.commandWorked(coll.insert({a: 1, b: 2})); assert.commandWorked(coll.insert({a: 1, b: 4})); // Explain output should reflect optimizations. // $and should not be in the explain output because it is optimized out. let explain = coll.explain().aggregate( [{$sort: {b: -1}}, {$addFields: {c: {$mod: ["$a", 4]}}}, {$match: {$and: [{c: 1}]}}]); assert.commandWorked(explain); assert.eq(getAggPlanStage(explain, "$match"), {$match: {c: {$eq: 1}}}); }());