Bird
Raised Fist0
MongoDBquery~5 mins

$project stage for shaping output in MongoDB - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the $project stage in a MongoDB aggregation pipeline?
The $project stage is used to shape the output documents by including, excluding, or adding new fields. It controls which fields appear in the final result.
Click to reveal answer
beginner
How do you exclude a field named password using $project?
Set the field to 0 in $project:
{ password: 0 } excludes the password field from the output.
Click to reveal answer
intermediate
How can you rename a field firstName to name using $project?
Use the original field as the value for the new field:
{ name: "$firstName" } creates a new field name with the value from firstName.
Click to reveal answer
intermediate
Can you add a new field with a computed value in $project? Give an example.
Yes. For example, to add a field fullName by combining firstName and lastName:
{ fullName: { $concat: ["$firstName", " ", "$lastName"] } }
Click to reveal answer
advanced
What happens if you include one field with 1 and exclude another with 0 in the same $project stage?
MongoDB does not allow mixing inclusion (1) and exclusion (0) except for the _id field. You must choose either to include fields or exclude fields, but not both.
Click to reveal answer
What does { age: 1 } mean inside a $project stage?
ACreate a new field named <code>age</code>
BExclude the <code>age</code> field from the output
CRename the <code>age</code> field
DInclude the <code>age</code> field in the output
How do you exclude the password field in $project?
A{ password: false }
B{ password: 1 }
C{ password: 0 }
D{ password: null }
Which of the following is a valid way to add a new field fullName by combining firstName and lastName?
A{ fullName: { $concat: ["$firstName", " ", "$lastName"] } }
B{ fullName: "$firstName" & "$lastName" }
C{ fullName: "$firstName" + "$lastName" }
D{ fullName: "$firstName $lastName" }
What is the default behavior of _id in $project if not specified?
AIt is excluded by default
BIt is included by default
CIt causes an error
DIt is renamed to <code>id</code>
Is this $project valid? { name: 1, age: 0 }
ANo, mixing inclusion and exclusion is not allowed
BYes, it includes <code>name</code> and excludes <code>age</code>
CYes, but only if <code>_id</code> is excluded
DNo, fields must be set to true or false
Explain how the $project stage shapes the output in a MongoDB aggregation pipeline.
Think about how you can choose which data to see and how it looks.
You got /4 concepts.
    Describe the rules about mixing field inclusion and exclusion in the $project stage.
    Remember the special case for the _id field.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the $project stage do in a MongoDB aggregation pipeline?
      easy
      A. It filters documents based on conditions.
      B. It shapes the output by selecting, renaming, or creating fields.
      C. It sorts the documents in ascending or descending order.
      D. It groups documents by a specified key.

      Solution

      1. Step 1: Understand the purpose of $project

        The $project stage is used to control which fields appear in the output documents and how they are shaped.
      2. Step 2: Compare with other stages

        Filtering is done by $match, sorting by $sort, and grouping by $group. So $project is for shaping output fields.
      3. Final Answer:

        It shapes the output by selecting, renaming, or creating fields. -> Option B
      4. Quick Check:

        $project shapes output = A [OK]
      Hint: Remember: $project controls output fields only [OK]
      Common Mistakes:
      • Confusing $project with $match for filtering
      • Thinking $project sorts documents
      • Mixing $project with $group for aggregation
      2. Which of the following is the correct syntax to include only the name and age fields in the output using $project?
      easy
      A. { $project: { name: 1, age: 1 } }
      B. { $project: { name: 0, age: 0 } }
      C. { $project: { name: true, age: true } }
      D. { $project: { name: 'include', age: 'include' } }

      Solution

      1. Step 1: Recall $project syntax for inclusion

        To include fields, set them to 1. To exclude, set to 0. Boolean or strings are invalid.
      2. Step 2: Check each option

        { $project: { name: 1, age: 1 } } uses 1 for inclusion correctly. { $project: { name: 0, age: 0 } } excludes fields. { $project: { name: true, age: true } } uses true which is invalid. { $project: { name: 'include', age: 'include' } } uses strings which is invalid.
      3. Final Answer:

        { $project: { name: 1, age: 1 } } -> Option A
      4. Quick Check:

        Include fields = 1 in $project [OK]
      Hint: Use 1 to include fields, 0 to exclude in $project [OK]
      Common Mistakes:
      • Using true/false instead of 1/0
      • Mixing inclusion and exclusion in same $project
      • Using strings instead of numbers for field selection
      3. Given the collection documents:
      { "name": "Alice", "age": 25, "city": "NY" }

      What will be the output of this aggregation?
      [{ $project: { fullName: "$name", ageInMonths: { $multiply: ["$age", 12] }, _id: 0 } }]
      medium
      A. [{ "fullName": "Alice", "ageInMonths": 25 }]
      B. [{ "name": "Alice", "ageInMonths": 300 }]
      C. [{ "fullName": "Alice", "age": 25 }]
      D. [{ "fullName": "Alice", "ageInMonths": 300 }]

      Solution

      1. Step 1: Understand field renaming and calculation

        The fullName field is created by copying name. The ageInMonths is calculated by multiplying age by 12 (25*12=300). The _id is excluded.
      2. Step 2: Check output fields

        Output has fullName with "Alice" and ageInMonths with 300. No name or age fields remain.
      3. Final Answer:

        [{ "fullName": "Alice", "ageInMonths": 300 }] -> Option D
      4. Quick Check:

        Rename + multiply age = output [OK]
      Hint: Use $multiply to calculate new fields in $project [OK]
      Common Mistakes:
      • Expecting original fields to remain without including them
      • Confusing field names after renaming
      • Forgetting to exclude _id if not wanted
      4. Identify the error in this $project stage:
      { $project: { fullName: "$name", ageInMonths: { $multiply: ["age", 12] }, _id: 0 } }
      medium
      A. The _id field cannot be excluded.
      B. Cannot use $multiply inside $project.
      C. Field name "age" should be prefixed with $ to reference the field.
      D. The field fullName cannot be renamed.

      Solution

      1. Step 1: Check field references in expressions

        In MongoDB aggregation, to reference a field inside expressions, prefix with $. Here, "age" is missing $.
      2. Step 2: Validate other parts

        $multiply is valid in $project. Excluding _id is allowed. Renaming fields is allowed.
      3. Final Answer:

        Field name "age" should be prefixed with $ to reference the field. -> Option C
      4. Quick Check:

        Field references need $ prefix [OK]
      Hint: Always prefix field names with $ inside expressions [OK]
      Common Mistakes:
      • Omitting $ before field names in expressions
      • Thinking $multiply is invalid in $project
      • Believing _id cannot be excluded
      5. You have documents with fields firstName, lastName, and birthYear. Write a $project stage that outputs fullName as concatenation of first and last names separated by a space, and age calculated as 2024 minus birthYear. Which is the correct stage?
      hard
      A. { $project: { fullName: { $concat: ["$firstName", " ", "$lastName"] }, age: { $subtract: [2024, "$birthYear"] }, _id: 0 } }
      B. { $project: { fullName: "$firstName $lastName", age: 2024 - "$birthYear", _id: 0 } }
      C. { $project: { fullName: { $concat: ["firstName", " ", "lastName"] }, age: { $subtract: [2024, "birthYear"] }, _id: 0 } }
      D. { $project: { fullName: { $concat: ["$firstName", "$lastName"] }, age: { $subtract: ["birthYear", 2024] }, _id: 0 } }

      Solution

      1. Step 1: Build fullName using $concat with spaces

        Use $concat with "$firstName", a space string, and "$lastName" to join names with a space.
      2. Step 2: Calculate age using $subtract

        Subtract birthYear field from 2024 using $subtract. Field references need $.
      3. Step 3: Check each option

        { $project: { fullName: { $concat: ["$firstName", " ", "$lastName"] }, age: { $subtract: [2024, "$birthYear"] }, _id: 0 } } correctly uses $concat with space and $subtract with field references. { $project: { fullName: "$firstName $lastName", age: 2024 - "$birthYear", _id: 0 } } uses invalid string concatenation and arithmetic. { $project: { fullName: { $concat: ["firstName", " ", "lastName"] }, age: { $subtract: [2024, "birthYear"] }, _id: 0 } } misses $ on fields. { $project: { fullName: { $concat: ["$firstName", "$lastName"] }, age: { $subtract: ["birthYear", 2024] }, _id: 0 } } misses space and reverses subtraction.
      4. Final Answer:

        { $project: { fullName: { $concat: ["$firstName", " ", "$lastName"] }, age: { $subtract: [2024, "$birthYear"] }, _id: 0 } } -> Option A
      5. Quick Check:

        Use $concat with space and $subtract with $field [OK]
      Hint: Use $concat with spaces and $subtract with $field for calculations [OK]
      Common Mistakes:
      • Forgetting $ before field names
      • Concatenating fields without spaces
      • Subtracting in wrong order
      • Using string expressions instead of operators
      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