diff options
Diffstat (limited to 'jstests/aggregation/sources/unset/unset.js')
-rw-r--r-- | jstests/aggregation/sources/unset/unset.js | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/jstests/aggregation/sources/unset/unset.js b/jstests/aggregation/sources/unset/unset.js new file mode 100644 index 00000000000..70adb54db8d --- /dev/null +++ b/jstests/aggregation/sources/unset/unset.js @@ -0,0 +1,35 @@ +// Basic testing for the $unset aggregation stage. +(function() { + "use strict"; + + load("jstests/aggregation/extras/utils.js"); // For assertArrayEq. + + const coll = db.agg_stage_unset; + coll.drop(); + + assert.commandWorked(coll.insert( + [{_id: 0, a: 10}, {_id: 1, a: {b: 20, c: 30, 0: 40}}, {_id: 2, a: [{b: 50, c: 60}]}])); + + // unset single field. + let result = coll.aggregate([{$unset: ["a"]}]).toArray(); + assertArrayEq({actual: result, expected: [{_id: 0}, {_id: 1}, {_id: 2}]}); + + // unset multiple fields. + result = coll.aggregate([{$unset: ["_id", "a"]}]).toArray(); + assertArrayEq({actual: result, expected: [{}, {}, {}]}); + + // unset with dotted field path. + result = coll.aggregate([{$unset: ["a.b"]}]).toArray(); + assertArrayEq({ + actual: result, + expected: [{_id: 0, a: 10}, {_id: 1, a: {0: 40, c: 30}}, {_id: 2, a: [{c: 60}]}] + }); + + // Numeric field paths in aggregation represent field name only and not array offset. + result = coll.aggregate([{$unset: ["a.0"]}]).toArray(); + assertArrayEq({ + actual: result, + expected: [{_id: 0, a: 10}, {_id: 1, a: {b: 20, c: 30}}, {_id: 2, a: [{b: 50, c: 60}]}] + }); + +})(); |