Bird
Raised Fist0
MongoDBquery~10 mins

$addFields for computed fields in MongoDB - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - $addFields for computed fields
Start with original documents
↓
$addFields stage adds new fields
↓
Compute values using expressions
↓
Add computed fields to each document
↓
Output documents with new fields
The $addFields stage takes each document, computes new fields using expressions, and adds these fields to the document.
Execution Sample
MongoDB
db.sales.aggregate([
  { $addFields: { total: { $multiply: ["$price", "$quantity"] } } }
])
This aggregation adds a new field 'total' by multiplying 'price' and 'quantity' in each sales document.
Execution Table
StepInput DocumentExpression EvaluatedComputed Field ValueOutput Document
1{"item": "apple", "price": 2, "quantity": 5}$multiply: [2, 5]10{"item": "apple", "price": 2, "quantity": 5, "total": 10}
2{"item": "banana", "price": 1, "quantity": 10}$multiply: [1, 10]10{"item": "banana", "price": 1, "quantity": 10, "total": 10}
3{"item": "orange", "price": 3, "quantity": 7}$multiply: [3, 7]21{"item": "orange", "price": 3, "quantity": 7, "total": 21}
4No more documentsN/AN/AAggregation ends
💡 All documents processed, aggregation pipeline completes.
Variable Tracker
VariableStartAfter 1After 2After 3Final
pricevaries per doc213N/A
quantityvaries per doc5107N/A
totalundefined101021N/A
Key Moments - 2 Insights
Why does the 'total' field appear in the output documents?
Because $addFields computes the expression (price * quantity) and adds it as the 'total' field to each document, as shown in execution_table rows 1-3.
What happens if a document is missing 'price' or 'quantity'?
The multiplication expression would result in null or error, so the 'total' field might be missing or null. This is not shown here but important to handle in real cases.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the 'total' value for the second document?
A1
B5
C10
D15
💡 Hint
Check execution_table row 2 under 'Computed Field Value'
At which step does the aggregation pipeline finish processing documents?
AStep 4
BStep 3
CStep 2
DStep 1
💡 Hint
Look at execution_table row 4 where it says 'No more documents'
If the 'quantity' was 0 in a document, what would be the 'total' value?
Anull
B0
Cundefined
D1
💡 Hint
Recall multiplication with zero results in zero, as shown in the expression evaluation column
Concept Snapshot
$addFields adds new fields to documents in aggregation.
Syntax: { $addFields: { newField: <expression> } }
Computes values per document and adds them.
Does not remove existing fields.
Useful for calculated fields like totals or flags.
Full Transcript
The $addFields stage in MongoDB aggregation takes each input document and adds new fields by computing expressions. For example, multiplying price and quantity to get a total. Each document is processed one by one, the expression is evaluated, and the new field is added. This process repeats until all documents are processed. The output documents have all original fields plus the new computed fields. This is useful to enrich data without changing original fields. If a field used in the expression is missing, the result may be null or missing. The execution table shows each step with input document, expression, computed value, and output document. The variable tracker shows how price, quantity, and total change per document. Understanding this helps create dynamic fields in aggregation pipelines.

Practice

(1/5)
1. What is the primary purpose of the $addFields stage in a MongoDB aggregation pipeline?
easy
A. To add new fields or update existing fields with computed values in documents
B. To delete fields from documents permanently
C. To sort documents based on a field
D. To group documents by a specific field

Solution

  1. Step 1: Understand the role of $addFields

    $addFields is used to add new fields or update existing fields with computed values inside documents during aggregation.
  2. Step 2: Compare with other stages

    Deleting fields is done by $project, sorting by $sort, and grouping by $group. These are different from $addFields.
  3. Final Answer:

    To add new fields or update existing fields with computed values in documents -> Option A
  4. Quick Check:

    $addFields adds or updates fields [OK]
Hint: Remember: $addFields enriches documents with new computed fields [OK]
Common Mistakes:
  • Confusing $addFields with $project which removes fields
  • Thinking $addFields sorts or groups documents
  • Assuming $addFields deletes fields
2. Which of the following is the correct syntax to add a new field named totalPrice that multiplies price and quantity using $addFields?
easy
A. { $addFields: { totalPrice: "$price" * "$quantity" } }
B. { $addFields: { totalPrice: "$price" + "$quantity" } }
C. { $addFields: { totalPrice: { $multiply: ["$price", "$quantity"] } } }
D. { $addFields: { totalPrice: { $add: ["$price", "$quantity"] } } }

Solution

  1. Step 1: Identify correct operator for multiplication

    MongoDB uses $multiply with an array of fields to multiply values.
  2. Step 2: Check syntax correctness

    { $addFields: { totalPrice: { $multiply: ["$price", "$quantity"] } } } correctly uses $multiply with array syntax and field references with $.
  3. Final Answer:

    { $addFields: { totalPrice: { $multiply: ["$price", "$quantity"] } } } -> Option C
  4. Quick Check:

    Use $multiply with array for multiplication [OK]
Hint: Use $multiply with array of fields for multiplication [OK]
Common Mistakes:
  • Using arithmetic operators like * directly inside $addFields
  • Confusing $add with multiplication
  • Missing $ before field names
3. Given the collection documents:
{ "item": "apple", "price": 2, "quantity": 5 }

What will be the output document after applying this aggregation stage?
{ $addFields: { totalCost: { $multiply: ["$price", "$quantity"] } } }
medium
A. Error: Invalid operator
B. { "item": "apple", "price": 2, "quantity": 5, "totalCost": "2*5" }
C. { "item": "apple", "price": 2, "quantity": 5 }
D. { "item": "apple", "price": 2, "quantity": 5, "totalCost": 10 }

Solution

  1. Step 1: Calculate the multiplication of price and quantity

    2 multiplied by 5 equals 10.
  2. Step 2: Understand $addFields adds the computed field

    The new field totalCost will be added with value 10.
  3. Final Answer:

    { "item": "apple", "price": 2, "quantity": 5, "totalCost": 10 } -> Option D
  4. Quick Check:

    2 * 5 = 10 added as totalCost [OK]
Hint: Multiply fields inside $addFields to get computed values [OK]
Common Mistakes:
  • Expecting string expression instead of computed number
  • Forgetting to add the new field in output
  • Assuming syntax error when operator is correct
4. Identify the error in this aggregation stage:
{ $addFields: { discountPrice: { $multiply: "$price", 0.9 } } }
medium
A. Cannot multiply a field by a number in $addFields
B. Incorrect use of $multiply operator syntax; expects an array
C. Field name discountPrice is invalid
D. Missing $ before price

Solution

  1. Step 1: Check $multiply syntax

    $multiply requires an array of expressions, but here it is given two separate arguments.
  2. Step 2: Identify correct syntax

    The correct syntax is { $multiply: ["$price", 0.9] } using an array.
  3. Final Answer:

    Incorrect use of $multiply operator syntax; expects an array -> Option B
  4. Quick Check:

    $multiply needs array of operands [OK]
Hint: Always use array syntax with $multiply [OK]
Common Mistakes:
  • Passing arguments to $multiply without array brackets
  • Assuming field names cannot be multiplied by numbers
  • Confusing field name syntax with missing $
5. You have documents with fields price and taxRate. You want to add a field finalPrice that is price plus price multiplied by taxRate. Which $addFields stage correctly computes this?
hard
A. { $addFields: { finalPrice: { $add: ["$price", { $multiply: ["$price", "$taxRate"] }] } } }
B. { $addFields: { finalPrice: "$price" + "$price" * "$taxRate" } }
C. { $addFields: { finalPrice: { $multiply: ["$price", "$taxRate"] } } }
D. { $addFields: { finalPrice: { $add: ["$price", "$taxRate"] } } }

Solution

  1. Step 1: Understand the formula for finalPrice

    The formula is price + (price * taxRate), which requires addition and multiplication.
  2. Step 2: Check correct MongoDB operators usage

    { $addFields: { finalPrice: { $add: ["$price", { $multiply: ["$price", "$taxRate"] }] } } } uses $add with an array containing price and the multiplication result of price and taxRate, which is correct syntax.
  3. Final Answer:

    { $addFields: { finalPrice: { $add: ["$price", { $multiply: ["$price", "$taxRate"] }] } } } -> Option A
  4. Quick Check:

    Use nested $add and $multiply for combined calculations [OK]
Hint: Nest $multiply inside $add for combined calculations [OK]
Common Mistakes:
  • Trying to use arithmetic operators directly inside $addFields
  • Adding price and taxRate directly without multiplication
  • Using wrong operator or missing array brackets
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard