diff options
Diffstat (limited to 'jstests/core/query/array/arrayfindb.js')
-rw-r--r-- | jstests/core/query/array/arrayfindb.js | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/jstests/core/query/array/arrayfindb.js b/jstests/core/query/array/arrayfindb.js new file mode 100644 index 00000000000..51fa22f6dff --- /dev/null +++ b/jstests/core/query/array/arrayfindb.js @@ -0,0 +1,30 @@ +// 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.createIndex({"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.createIndex({"a.b": 1}); +t.createIndex({"a.c": 1}); +assert.eq(2, + t.find({a: {$elemMatch: {$or: [{b: 2}, {c: 2}]}}}).itcount(), + "Case #2: wrong number of results returned -- indexed"); |