-
Type:
New Feature
-
Resolution: Duplicate
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Aggregation Framework
-
None
-
Integration 17 (07/15/16)
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Syntax:
$transform: {
root: <expression evaluates to object>,
set: {<fieldname>: <arbitrary expression>}
}
Examples
// ===== Example #1 - Promoting a subfield to the top level =====
>db.example.insert({_id: 0, a1: {b: 1}, a2: 2})
>db.example.aggregate([{$transform: {root: “$a1”}]);
{b: 1}
// ===== Example #2 - Creating a new field =====
>db.example.insert({_id: 0, a1: {b: 1}, a2: 2})
>db.example.aggregate([{$transform: {set: {a3: 3}}}])
{_id: 0, a1: {b: 1}, a2: 2, a3: 3}
// ===== Example #3 - Creating new calculated fields =====
>db.example.insert({_id: 0, a1: {b: 1}, a2: 2})
>db.example.aggregate([{$transform: {set: {a3: {$gt: ["$a2", 3]}, a4: 4 }}}])
{_id: 0, a1: {b: 1}, a2: 2, a3: false, a4: 4}
// ===== Example #4 - Promoting a subfield to the top level and then creating new fields =====
>db.example.insert({_id: 0, a1: {b: 1}, a2: 2 })
>db.example.aggregate([{$transform: {root: "$a1", set: {c: 3}}}])
{b: 1, c: 3}
// ===== Example #5 - Error: using value of a field that doesn't exist anymore =====
>db.example.insert({_id: 0, a1: {b: 1}, a2: 2 })
>db.example.aggregate([{$transform: {root: "$a1", set: {c: "$a2"}}}])
Error
// Allowing this is a non-goal of this ticket.
This command will be another stage in the aggregation pipeline. Either the root or set fields (or both) must be present in the $transform. The transformation replaces the document with the root field first, and then sets the fields specified in set on the contents of the replaced document.
- duplicates
-
SERVER-5781 Implement $addFields aggregation stage for using expression language to add new fields to a document
-
- Closed
-
-
SERVER-23313 Add a $replaceRoot stage which allows promoting a sub-document to the top level
-
- Closed
-