summaryrefslogtreecommitdiff
path: root/jstests/aggregation/expressions/objectToArray.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation/expressions/objectToArray.js')
-rw-r--r--jstests/aggregation/expressions/objectToArray.js179
1 files changed, 87 insertions, 92 deletions
diff --git a/jstests/aggregation/expressions/objectToArray.js b/jstests/aggregation/expressions/objectToArray.js
index 5f92b0ae1a9..0ec4a40c2c0 100644
--- a/jstests/aggregation/expressions/objectToArray.js
+++ b/jstests/aggregation/expressions/objectToArray.js
@@ -1,95 +1,90 @@
// Tests for the $objectToArray aggregation expression.
(function() {
- "use strict";
-
- // For assertErrorCode().
- load("jstests/aggregation/extras/utils.js");
-
- let coll = db.object_to_array_expr;
- coll.drop();
-
- let object_to_array_expr = {$project: {expanded: {$objectToArray: "$subDoc"}}};
-
- // $objectToArray correctly converts a document to an array of key-value pairs.
- assert.writeOK(coll.insert({_id: 0, subDoc: {"a": 1, "b": 2, "c": "foo"}}));
- let result = coll.aggregate([{$match: {_id: 0}}, object_to_array_expr]).toArray();
- assert.eq(
- result,
- [{_id: 0, expanded: [{"k": "a", "v": 1}, {"k": "b", "v": 2}, {"k": "c", "v": "foo"}]}]);
-
- assert.writeOK(coll.insert({_id: 1, subDoc: {"y": []}}));
- result = coll.aggregate([{$match: {_id: 1}}, object_to_array_expr]).toArray();
- assert.eq(result, [{_id: 1, expanded: [{"k": "y", "v": []}]}]);
-
- assert.writeOK(coll.insert({_id: 2, subDoc: {"a": 1, "b": {"d": "string"}, "c": [1, 2]}}));
- result = coll.aggregate([{$match: {_id: 2}}, object_to_array_expr]).toArray();
- assert.eq(
- result, [{
- _id: 2,
- expanded:
- [{"k": "a", "v": 1}, {"k": "b", "v": {"d": "string"}}, {"k": "c", "v": [1, 2]}]
- }]);
-
- assert.writeOK(coll.insert({_id: 3, subDoc: {}}));
- result = coll.aggregate([{$match: {_id: 3}}, object_to_array_expr]).toArray();
- assert.eq(result, [{_id: 3, expanded: []}]);
-
- // Turns to array from the root of the document.
- assert.writeOK(coll.insert({_id: 4, "a": 1, "b": 2, "c": 3}));
- result =
- coll.aggregate([{$match: {_id: 4}}, {$project: {document: {$objectToArray: "$$ROOT"}}}])
- .toArray();
- assert.eq(result, [
- {
- _id: 4,
- document:
- [{"k": "_id", "v": 4}, {"k": "a", "v": 1}, {"k": "b", "v": 2}, {"k": "c", "v": 3}]
- }
- ]);
-
- assert.writeOK(coll.insert({_id: 5, "date": ISODate("2017-01-24T00:00:00")}));
- result = coll.aggregate([
- {$match: {_id: 5}},
- {$project: {document: {$objectToArray: {dayOfWeek: {$dayOfWeek: "$date"}}}}}
- ])
- .toArray();
- assert.eq(result, [{_id: 5, document: [{"k": "dayOfWeek", "v": 3}]}]);
-
- // $objectToArray errors on non-document types.
- assert.writeOK(coll.insert({_id: 6, subDoc: "string"}));
- assertErrorCode(coll, [{$match: {_id: 6}}, object_to_array_expr], 40390);
-
- assert.writeOK(coll.insert({_id: 7, subDoc: ObjectId()}));
- assertErrorCode(coll, [{$match: {_id: 7}}, object_to_array_expr], 40390);
-
- assert.writeOK(coll.insert({_id: 8, subDoc: NumberLong(0)}));
- assertErrorCode(coll, [{$match: {_id: 8}}, object_to_array_expr], 40390);
-
- assert.writeOK(coll.insert({_id: 9, subDoc: []}));
- assertErrorCode(coll, [{$match: {_id: 9}}, object_to_array_expr], 40390);
-
- assert.writeOK(coll.insert({_id: 10, subDoc: [0]}));
- assertErrorCode(coll, [{$match: {_id: 10}}, object_to_array_expr], 40390);
-
- assert.writeOK(coll.insert({_id: 11, subDoc: ["string"]}));
- assertErrorCode(coll, [{$match: {_id: 11}}, object_to_array_expr], 40390);
-
- assert.writeOK(coll.insert({_id: 12, subDoc: [{"a": "b"}]}));
- assertErrorCode(coll, [{$match: {_id: 12}}, object_to_array_expr], 40390);
-
- assert.writeOK(coll.insert({_id: 13, subDoc: NaN}));
- assertErrorCode(coll, [{$match: {_id: 13}}, object_to_array_expr], 40390);
-
- // $objectToArray outputs null on null-ish types.
- assert.writeOK(coll.insert({_id: 14, subDoc: null}));
- result = coll.aggregate([{$match: {_id: 14}}, object_to_array_expr]).toArray();
- assert.eq(result, [{_id: 14, expanded: null}]);
-
- assert.writeOK(coll.insert({_id: 15, subDoc: undefined}));
- result = coll.aggregate([{$match: {_id: 15}}, object_to_array_expr]).toArray();
- assert.eq(result, [{_id: 15, expanded: null}]);
-
- assert.writeOK(coll.insert({_id: 16}));
- result = coll.aggregate([{$match: {_id: 16}}, object_to_array_expr]).toArray();
- assert.eq(result, [{_id: 16, expanded: null}]);
+"use strict";
+
+// For assertErrorCode().
+load("jstests/aggregation/extras/utils.js");
+
+let coll = db.object_to_array_expr;
+coll.drop();
+
+let object_to_array_expr = {$project: {expanded: {$objectToArray: "$subDoc"}}};
+
+// $objectToArray correctly converts a document to an array of key-value pairs.
+assert.writeOK(coll.insert({_id: 0, subDoc: {"a": 1, "b": 2, "c": "foo"}}));
+let result = coll.aggregate([{$match: {_id: 0}}, object_to_array_expr]).toArray();
+assert.eq(result,
+ [{_id: 0, expanded: [{"k": "a", "v": 1}, {"k": "b", "v": 2}, {"k": "c", "v": "foo"}]}]);
+
+assert.writeOK(coll.insert({_id: 1, subDoc: {"y": []}}));
+result = coll.aggregate([{$match: {_id: 1}}, object_to_array_expr]).toArray();
+assert.eq(result, [{_id: 1, expanded: [{"k": "y", "v": []}]}]);
+
+assert.writeOK(coll.insert({_id: 2, subDoc: {"a": 1, "b": {"d": "string"}, "c": [1, 2]}}));
+result = coll.aggregate([{$match: {_id: 2}}, object_to_array_expr]).toArray();
+assert.eq(
+ result, [{
+ _id: 2,
+ expanded: [{"k": "a", "v": 1}, {"k": "b", "v": {"d": "string"}}, {"k": "c", "v": [1, 2]}]
+ }]);
+
+assert.writeOK(coll.insert({_id: 3, subDoc: {}}));
+result = coll.aggregate([{$match: {_id: 3}}, object_to_array_expr]).toArray();
+assert.eq(result, [{_id: 3, expanded: []}]);
+
+// Turns to array from the root of the document.
+assert.writeOK(coll.insert({_id: 4, "a": 1, "b": 2, "c": 3}));
+result = coll.aggregate([{$match: {_id: 4}}, {$project: {document: {$objectToArray: "$$ROOT"}}}])
+ .toArray();
+assert.eq(
+ result, [{
+ _id: 4,
+ document: [{"k": "_id", "v": 4}, {"k": "a", "v": 1}, {"k": "b", "v": 2}, {"k": "c", "v": 3}]
+ }]);
+
+assert.writeOK(coll.insert({_id: 5, "date": ISODate("2017-01-24T00:00:00")}));
+result = coll.aggregate([
+ {$match: {_id: 5}},
+ {$project: {document: {$objectToArray: {dayOfWeek: {$dayOfWeek: "$date"}}}}}
+ ])
+ .toArray();
+assert.eq(result, [{_id: 5, document: [{"k": "dayOfWeek", "v": 3}]}]);
+
+// $objectToArray errors on non-document types.
+assert.writeOK(coll.insert({_id: 6, subDoc: "string"}));
+assertErrorCode(coll, [{$match: {_id: 6}}, object_to_array_expr], 40390);
+
+assert.writeOK(coll.insert({_id: 7, subDoc: ObjectId()}));
+assertErrorCode(coll, [{$match: {_id: 7}}, object_to_array_expr], 40390);
+
+assert.writeOK(coll.insert({_id: 8, subDoc: NumberLong(0)}));
+assertErrorCode(coll, [{$match: {_id: 8}}, object_to_array_expr], 40390);
+
+assert.writeOK(coll.insert({_id: 9, subDoc: []}));
+assertErrorCode(coll, [{$match: {_id: 9}}, object_to_array_expr], 40390);
+
+assert.writeOK(coll.insert({_id: 10, subDoc: [0]}));
+assertErrorCode(coll, [{$match: {_id: 10}}, object_to_array_expr], 40390);
+
+assert.writeOK(coll.insert({_id: 11, subDoc: ["string"]}));
+assertErrorCode(coll, [{$match: {_id: 11}}, object_to_array_expr], 40390);
+
+assert.writeOK(coll.insert({_id: 12, subDoc: [{"a": "b"}]}));
+assertErrorCode(coll, [{$match: {_id: 12}}, object_to_array_expr], 40390);
+
+assert.writeOK(coll.insert({_id: 13, subDoc: NaN}));
+assertErrorCode(coll, [{$match: {_id: 13}}, object_to_array_expr], 40390);
+
+// $objectToArray outputs null on null-ish types.
+assert.writeOK(coll.insert({_id: 14, subDoc: null}));
+result = coll.aggregate([{$match: {_id: 14}}, object_to_array_expr]).toArray();
+assert.eq(result, [{_id: 14, expanded: null}]);
+
+assert.writeOK(coll.insert({_id: 15, subDoc: undefined}));
+result = coll.aggregate([{$match: {_id: 15}}, object_to_array_expr]).toArray();
+assert.eq(result, [{_id: 15, expanded: null}]);
+
+assert.writeOK(coll.insert({_id: 16}));
+result = coll.aggregate([{$match: {_id: 16}}, object_to_array_expr]).toArray();
+assert.eq(result, [{_id: 16, expanded: null}]);
}());