diff options
author | Matt Dannenberg <dannenberg.matt@gmail.com> | 2012-06-22 11:51:47 -0400 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2012-06-29 13:41:29 -0400 |
commit | 36c78176a97e52874850d38d08ac5f8019055325 (patch) | |
tree | fdbc18cc05f557afca19ba7f26bbec569c75d613 /jstests/aggregation/bugs/server6147.js | |
parent | 9bfb82ea042d1a21d7058f44367caa9688cb4331 (diff) | |
download | mongo-36c78176a97e52874850d38d08ac5f8019055325.tar.gz |
SERVER-6147 fix aggro $ne to behave with constants
Diffstat (limited to 'jstests/aggregation/bugs/server6147.js')
-rw-r--r-- | jstests/aggregation/bugs/server6147.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/jstests/aggregation/bugs/server6147.js b/jstests/aggregation/bugs/server6147.js new file mode 100644 index 00000000000..27f81c7ff91 --- /dev/null +++ b/jstests/aggregation/bugs/server6147.js @@ -0,0 +1,59 @@ +/* + * 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 + */ + +// Load the test utilities +load('jstests/aggregation/extras/utils.js'); + +// 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.runCommand( +{ aggregate: "s6147", pipeline : [ + { $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(arrayEq(s6147.result, s6147result), 's6147 failed'); |