summaryrefslogtreecommitdiff
path: root/jstests/core/query/all/all5.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/query/all/all5.js')
-rw-r--r--jstests/core/query/all/all5.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/jstests/core/query/all/all5.js b/jstests/core/query/all/all5.js
new file mode 100644
index 00000000000..a5faaa1767f
--- /dev/null
+++ b/jstests/core/query/all/all5.js
@@ -0,0 +1,28 @@
+// Test $all/$elemMatch/null matching - SERVER-4517
+
+t = db.jstests_all5;
+t.drop();
+
+function checkMatch(doc) {
+ t.drop();
+ t.save(doc);
+ assert.eq(1, t.count({a: {$elemMatch: {b: null}}}));
+ assert.eq(1, t.count({a: {$all: [{$elemMatch: {b: null}}]}}));
+}
+
+function checkNoMatch(doc) {
+ t.drop();
+ t.save(doc);
+ assert.eq(0, t.count({a: {$all: [{$elemMatch: {b: null}}]}}));
+}
+
+checkNoMatch({});
+checkNoMatch({a: 1});
+
+checkNoMatch({a: []});
+checkNoMatch({a: [1]});
+
+checkMatch({a: [{}]});
+checkMatch({a: [{c: 1}]});
+checkMatch({a: [{b: null}]});
+checkNoMatch({a: [{b: 1}]}, 0);