diff options
author | David Storch <david.storch@10gen.com> | 2014-04-21 10:32:51 -0400 |
---|---|---|
committer | Dan Pasette <dan@mongodb.com> | 2014-04-21 13:53:23 -0400 |
commit | e17c3e6dc06362c268836f2d3289c42e14b81e04 (patch) | |
tree | df543b121c1159d38e07046e6c522450f6f3e7f8 /jstests/core/arrayfindb.js | |
parent | 14e0ba91a9897018c6a0232eb25ab96f1c451a4f (diff) | |
download | mongo-e17c3e6dc06362c268836f2d3289c42e14b81e04.tar.gz |
SERVER-13664 never detach filters from inside elemMatch object
(cherry picked from commit 15bd7092e059a66ee74b65da9186c29300b70b2a)
Diffstat (limited to 'jstests/core/arrayfindb.js')
-rw-r--r-- | jstests/core/arrayfindb.js | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/jstests/core/arrayfindb.js b/jstests/core/arrayfindb.js new file mode 100644 index 00000000000..ad1a86be142 --- /dev/null +++ b/jstests/core/arrayfindb.js @@ -0,0 +1,26 @@ +// Test $elemMatch object with complex embedded expressions. + +var t = db.jstests_arrayfindb; +t.drop(); + +// Case #1: Ensure correct matching for $elemMatch with an embedded $and (SERVER-13664). +t.save({a: [{b: 1, c: 25}, {a: 3, b: 59}]}); +assert.eq(0, t.find({a: {$elemMatch: {b: {$gte: 2, $lt: 4}, c: 25}}}).itcount(), + "Case #1: wrong number of results returned -- unindexed"); + +t.ensureIndex({"a.b": 1, "a.c": 1}); +assert.eq(0, t.find({a: {$elemMatch: {b: {$gte: 2, $lt: 4}, c: 25}}}).itcount(), + "Case #1: wrong number of results returned -- indexed"); + +// Case #2: Ensure correct matching for $elemMatch with an embedded $or. +t.drop(); +t.save({a: [{b: 1}, {c: 1}]}); +t.save({a: [{b: 2}, {c: 1}]}); +t.save({a: [{b: 1}, {c: 2}]}); +assert.eq(2, t.find({a: {$elemMatch: {$or: [{b: 2}, {c: 2}]}}}).itcount(), + "Case #2: wrong number of results returned -- unindexed"); + +t.ensureIndex({"a.b": 1}); +t.ensureIndex({"a.c": 1}); +assert.eq(2, t.find({a: {$elemMatch: {$or: [{b: 2}, {c: 2}]}}}).itcount(), + "Case #2: wrong number of results returned -- indexed"); |