/* * SERVER-6147 : aggregation $ne expression applied to constant returns incorrect result * * This test validates the SERVER-6147 ticket. Return true when comparing a constant to a field * containing a different value using $ne. Previously it would return false when comparing a * constant and a field regardless of whether they were equal or not. */ /* * 1) Clear and create testing db * 2) Run an aggregation with $ne comparing constants and fields in various configurations * 3) Assert that the result is what we expected */ // Clear db db.s6147.drop(); // Populate db db.s6147.save({a: 1}); db.s6147.save({a: 2}); // Aggregate checking various combinations of the constant and the field var s6147 = db.s6147.aggregate({ $project: { _id: 0, constantAndField: {$ne: [1, "$a"]}, fieldAndConstant: {$ne: ["$a", 1]}, constantAndConstant: {$ne: [1, 1]}, fieldAndField: {$ne: ["$a", "$a"]} } }); /* * In both documents the constantAndConstant and fieldAndField should be false since they compare * something with itself but the constantAndField and fieldAndConstant should be different as * document one contains 1 which should return false and document 2 contains something different so * should return true */ var s6147result = [ { constantAndField: false, fieldAndConstant: false, constantAndConstant: false, fieldAndField: false }, { constantAndField: true, fieldAndConstant: true, constantAndConstant: false, fieldAndField: false } ]; // Assert assert.eq(s6147.toArray(), s6147result, 's6147 failed');