summaryrefslogtreecommitdiff
path: root/jstests/core/arrayfindb.js
diff options
context:
space:
mode:
authorDavid Storch <david.storch@10gen.com>2014-04-21 10:32:51 -0400
committerDan Pasette <dan@mongodb.com>2014-04-21 13:53:23 -0400
commite17c3e6dc06362c268836f2d3289c42e14b81e04 (patch)
treedf543b121c1159d38e07046e6c522450f6f3e7f8 /jstests/core/arrayfindb.js
parent14e0ba91a9897018c6a0232eb25ab96f1c451a4f (diff)
downloadmongo-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.js26
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");