summaryrefslogtreecommitdiff
path: root/jstests/core/query/array/arrayfind9.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/query/array/arrayfind9.js')
-rw-r--r--jstests/core/query/array/arrayfind9.js34
1 files changed, 34 insertions, 0 deletions
diff --git a/jstests/core/query/array/arrayfind9.js b/jstests/core/query/array/arrayfind9.js
new file mode 100644
index 00000000000..5406ae8c1d1
--- /dev/null
+++ b/jstests/core/query/array/arrayfind9.js
@@ -0,0 +1,34 @@
+// Assorted $elemMatch behavior checks.
+
+t = db.jstests_arrayfind9;
+t.drop();
+
+// Top level field $elemMatch:$not matching
+t.save({a: [1]});
+assert.eq(1, t.count({a: {$elemMatch: {$not: {$ne: 1}}}}));
+
+// Top level field object $elemMatch matching.
+t.drop();
+t.save({a: [{}]});
+assert.eq(1, t.count({a: {$elemMatch: {$gte: {}}}}));
+
+// Top level field array $elemMatch matching.
+t.drop();
+t.save({a: [[]]});
+assert.eq(1, t.count({a: {$elemMatch: {$in: [[]]}}}));
+
+// Matching by array index.
+t.drop();
+t.save({a: [['x']]});
+assert.eq(1, t.count({a: {$elemMatch: {'0': 'x'}}}));
+
+// Matching multiple values of a nested array.
+t.drop();
+t.save({a: [{b: [0, 2]}]});
+t.createIndex({a: 1});
+t.createIndex({'a.b': 1});
+plans = [{$natural: 1}, {a: 1}, {'a.b': 1}];
+for (i in plans) {
+ p = plans[i];
+ assert.eq(1, t.find({a: {$elemMatch: {b: {$gte: 1, $lte: 1}}}}).hint(p).itcount());
+}