summaryrefslogtreecommitdiff
path: root/jstests/aggregation/bugs/server8581.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation/bugs/server8581.js')
-rw-r--r--jstests/aggregation/bugs/server8581.js292
1 files changed, 121 insertions, 171 deletions
diff --git a/jstests/aggregation/bugs/server8581.js b/jstests/aggregation/bugs/server8581.js
index aa2158c0ced..54b97be3d08 100644
--- a/jstests/aggregation/bugs/server8581.js
+++ b/jstests/aggregation/bugs/server8581.js
@@ -5,154 +5,123 @@ t = db.jstests_aggregation_redact;
t.drop();
// this document will always be present but its content will change
-t.save({ _id: 1,
- level: 1,
- // b will present on level 3, 4, and 5
- b: { level: 3,
- c: 5, // always included when b is included
- // the contents of d test that if we cannot see a document then we cannot see its
- // array-nested subdocument even if we have permissions to see the subdocument.
- // it also tests arrays containing documents we cannot see
- d: [ {level: 1, e: 4},
- {f: 6},
- {level: 5, g: 9},
- "NOT AN OBJECT!!11!", // always included when b is included
- [2, 3, 4, {level: 1, r: 11}, {level: 5, s: 99}]
- // nested array should always be included once b is
- // but the second object should only show up at level 5
- ]
- },
- // the contents of h test that in order to see a subdocument (j) we must be able to see all
- // parent documents (h and i) even if we have permissions to see the subdocument
- h: { level: 2,
- i: { level: 4,
- j: { level: 1,
- k: 8
- }
- }
- },
- // l checks that we get an empty document when we can see a document but none of its fields
- l: {
- m: { level: 3,
- n: 12
- }
- },
- // o checks that we get an empty array when we can see a array but none of its entries
- o: [{ level: 5,
- p: 19
- }],
- // q is a basic field check and should always be included
- q: 14
- });
+t.save({
+ _id: 1,
+ level: 1,
+ // b will present on level 3, 4, and 5
+ b: {
+ level: 3,
+ c: 5, // always included when b is included
+ // the contents of d test that if we cannot see a document then we cannot see its
+ // array-nested subdocument even if we have permissions to see the subdocument.
+ // it also tests arrays containing documents we cannot see
+ d: [
+ {level: 1, e: 4},
+ {f: 6},
+ {level: 5, g: 9},
+ "NOT AN OBJECT!!11!", // always included when b is included
+ [2, 3, 4, {level: 1, r: 11}, {level: 5, s: 99}]
+ // nested array should always be included once b is
+ // but the second object should only show up at level 5
+ ]
+ },
+ // the contents of h test that in order to see a subdocument (j) we must be able to see all
+ // parent documents (h and i) even if we have permissions to see the subdocument
+ h: {level: 2, i: {level: 4, j: {level: 1, k: 8}}},
+ // l checks that we get an empty document when we can see a document but none of its fields
+ l: {m: {level: 3, n: 12}},
+ // o checks that we get an empty array when we can see a array but none of its entries
+ o: [{level: 5, p: 19}],
+ // q is a basic field check and should always be included
+ q: 14
+});
// this document will sometimes be missing
-t.save({ _id: 2,
- level: 4,
- });
-
-a1 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 1]}, "$$DESCEND", "$$PRUNE"]}});
-a2 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 2]}, "$$DESCEND", "$$PRUNE"]}});
-a3 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 3]}, "$$DESCEND", "$$PRUNE"]}});
-a4 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 4]}, "$$DESCEND", "$$PRUNE"]}});
-a5 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 5]}, "$$DESCEND", "$$PRUNE"]}});
-
-a1result = [{ _id: 1,
- level: 1,
- l: {},
- o: [],
- q: 14
- }];
-
-a2result = [{ _id: 1,
- level: 1,
- h: { level: 2,
- },
- l: {},
- o: [],
- q: 14
- }];
-
-a3result = [{ _id: 1,
- level: 1,
- b: { level: 3,
- c: 5,
- d: [ {level: 1, e: 4},
- {f: 6},
- "NOT AN OBJECT!!11!",
- [2, 3, 4, {level: 1, r: 11}]
- ]
- },
- h: { level: 2,
- },
- l: {
- m: { level: 3,
- n: 12
- }
- },
- o: [],
- q: 14
- }];
-
-a4result = [{ _id: 1,
- level: 1,
- b: { level: 3,
- c: 5,
- d: [ {level: 1, e: 4},
- {f: 6},
- "NOT AN OBJECT!!11!",
- [2, 3, 4, {level: 1, r: 11}]
- ]
- },
- h: { level: 2,
- i: { level: 4,
- j: { level: 1,
- k: 8
- }
- }
- },
- l: {
- m: { level: 3,
- n: 12
- }
- },
- o: [],
- q: 14
- },
- { _id: 2,
- level: 4,
- }];
-
-a5result = [{ _id: 1,
- level: 1,
- b: { level: 3,
- c: 5,
- d: [ {level: 1, e: 4},
- {f: 6},
- {level: 5, g: 9},
- "NOT AN OBJECT!!11!",
- [2, 3, 4, {level: 1, r: 11}, {level: 5, s: 99}]
- ]
- },
- h: { level: 2,
- i: { level: 4,
- j: { level: 1,
- k: 8
- }
- }
- },
- l: {
- m: { level: 3,
- n: 12
- }
- },
- o: [{ level: 5,
- p: 19
- }],
- q: 14
- },
- { _id: 2,
- level: 4,
- }];
+t.save({
+ _id: 2,
+ level: 4,
+});
+
+a1 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 1]}, "$$DESCEND", "$$PRUNE"]}});
+a2 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 2]}, "$$DESCEND", "$$PRUNE"]}});
+a3 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 3]}, "$$DESCEND", "$$PRUNE"]}});
+a4 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 4]}, "$$DESCEND", "$$PRUNE"]}});
+a5 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 5]}, "$$DESCEND", "$$PRUNE"]}});
+
+a1result = [{_id: 1, level: 1, l: {}, o: [], q: 14}];
+
+a2result = [{
+ _id: 1,
+ level: 1,
+ h: {
+ level: 2,
+ },
+ l: {},
+ o: [],
+ q: 14
+}];
+
+a3result = [{
+ _id: 1,
+ level: 1,
+ b: {
+ level: 3,
+ c: 5,
+ d: [{level: 1, e: 4}, {f: 6}, "NOT AN OBJECT!!11!", [2, 3, 4, {level: 1, r: 11}]]
+ },
+ h: {
+ level: 2,
+ },
+ l: {m: {level: 3, n: 12}},
+ o: [],
+ q: 14
+}];
+
+a4result = [
+ {
+ _id: 1,
+ level: 1,
+ b: {
+ level: 3,
+ c: 5,
+ d: [{level: 1, e: 4}, {f: 6}, "NOT AN OBJECT!!11!", [2, 3, 4, {level: 1, r: 11}]]
+ },
+ h: {level: 2, i: {level: 4, j: {level: 1, k: 8}}},
+ l: {m: {level: 3, n: 12}},
+ o: [],
+ q: 14
+ },
+ {
+ _id: 2,
+ level: 4,
+ }
+];
+
+a5result = [
+ {
+ _id: 1,
+ level: 1,
+ b: {
+ level: 3,
+ c: 5,
+ d: [
+ {level: 1, e: 4},
+ {f: 6},
+ {level: 5, g: 9},
+ "NOT AN OBJECT!!11!",
+ [2, 3, 4, {level: 1, r: 11}, {level: 5, s: 99}]
+ ]
+ },
+ h: {level: 2, i: {level: 4, j: {level: 1, k: 8}}},
+ l: {m: {level: 3, n: 12}},
+ o: [{level: 5, p: 19}],
+ q: 14
+ },
+ {
+ _id: 2,
+ level: 4,
+ }
+];
assert.eq(a1.toArray(), a1result);
assert.eq(a2.toArray(), a2result);
@@ -168,35 +137,16 @@ assert.eq(t.aggregate({$redact: "$$DESCEND"}).toArray(), t.find().toArray());
// test $$KEEP
t.drop();
// entire document should be present at 2 and beyond
-t.save({ _id: 1,
- level: 2,
- b: { level: 3,
- c: 2
- },
- d: { level: 1,
- e: 8
- },
- f: 9
- });
-
-b1 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 1]}, "$$KEEP", "$$PRUNE"]}});
-b2 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 2]}, "$$KEEP", "$$PRUNE"]}});
-b3 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 3]}, "$$KEEP", "$$PRUNE"]}});
+t.save({_id: 1, level: 2, b: {level: 3, c: 2}, d: {level: 1, e: 8}, f: 9});
+
+b1 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 1]}, "$$KEEP", "$$PRUNE"]}});
+b2 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 2]}, "$$KEEP", "$$PRUNE"]}});
+b3 = t.aggregate({$redact: {$cond: [{$lte: ['$level', 3]}, "$$KEEP", "$$PRUNE"]}});
b1result = [];
-b23result = [{ _id: 1,
- level: 2,
- b: { level: 3,
- c: 2
- },
- d: { level: 1,
- e: 8
- },
- f: 9
- }];
+b23result = [{_id: 1, level: 2, b: {level: 3, c: 2}, d: {level: 1, e: 8}, f: 9}];
assert.eq(b1.toArray(), b1result);
assert.eq(b2.toArray(), b23result);
assert.eq(b3.toArray(), b23result);
-