Bird
Raised Fist0
MongoDBquery~10 mins

$replaceRoot for restructuring in MongoDB - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to replace the root document with the "details" field.

MongoDB
db.collection.aggregate([{ $replaceRoot: { newRoot: [1] } }])
Drag options to blanks, or click blank then click option'
A$$ROOT
B$details
C$root
D$_id
Attempts:
3 left
💡 Hint
Common Mistakes
Using $$ROOT instead of $details causes no change.
Using $root or $_id replaces with wrong fields.
2fill in blank
medium

Complete the code to replace the root with the "info" field inside "profile".

MongoDB
db.collection.aggregate([{ $replaceRoot: { newRoot: [1] } }])
Drag options to blanks, or click blank then click option'
A$info.profile
B$profile.info.details
C$profile_info
D$profile.info
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping the order of fields like $info.profile is incorrect.
Using underscores instead of dots breaks the path.
3fill in blank
hard

Fix the error in the code to correctly replace the root with the "address" field.

MongoDB
db.collection.aggregate([{ $replaceRoot: { newRoot: [1] } }])
Drag options to blanks, or click blank then click option'
A$address
Baddress
C$$address
Daddress$
Attempts:
3 left
💡 Hint
Common Mistakes
Omitting the dollar sign causes an error.
Using double dollar signs or trailing dollar signs is invalid.
4fill in blank
hard

Fill both blanks to replace the root with the "contact" field and rename it to "info".

MongoDB
db.collection.aggregate([{ $replaceRoot: { newRoot: { [1]: [2] } } }])
Drag options to blanks, or click blank then click option'
Ainfo
B$contact
C$info
Dcontact
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong field path for the value.
Swapping key and value positions.
5fill in blank
hard

Fill all three blanks to replace the root with a new object containing "name", "email", and "phone" fields from "user".

MongoDB
db.collection.aggregate([{ $replaceRoot: { newRoot: { name: [1], email: [2], phone: [3] } } }])
Drag options to blanks, or click blank then click option'
A$user.name
B$user.email
C$user.phone
D$user.contact
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong field paths or mixing keys.
Using a non-existent field like $user.contact.

Practice

(1/5)
1. What does the $replaceRoot stage do in a MongoDB aggregation pipeline?
easy
A. It groups documents by a specified key.
B. It filters documents based on a condition.
C. It replaces the entire document with the specified embedded document.
D. It sorts documents by a specified field.

Solution

  1. Step 1: Understand the purpose of $replaceRoot

    $replaceRoot replaces the whole document with a specified nested document inside it.
  2. Step 2: Compare with other stages

    Filtering, sorting, and grouping are done by $match, $sort, and $group respectively, not $replaceRoot.
  3. Final Answer:

    It replaces the entire document with the specified embedded document. -> Option C
  4. Quick Check:

    $replaceRoot changes document root [OK]
Hint: Remember: $replaceRoot swaps the whole document root [OK]
Common Mistakes:
  • Confusing $replaceRoot with filtering or sorting stages
  • Thinking it only modifies part of the document
  • Assuming it adds fields instead of replacing
2. Which of the following is the correct syntax to use $replaceRoot to replace the root with the details field?
easy
A. { $replaceRoot: { newRoot: "$details" } }
B. { $replaceRoot: { root: "$details" } }
C. { $replaceRoot: { newRoot: details } }
D. { $replaceRoot: { newRoot: "$details" }, $match: {} }

Solution

  1. Step 1: Recall correct $replaceRoot syntax

    The correct syntax requires newRoot with a string path starting with "$" to specify the field.
  2. Step 2: Analyze options

    { $replaceRoot: { newRoot: "$details" } } uses newRoot: "$details" which is correct. { $replaceRoot: { root: "$details" } } uses wrong key root. { $replaceRoot: { newRoot: details } } misses quotes around field path. { $replaceRoot: { newRoot: "$details" }, $match: {} } adds an unrelated $match inside the same stage, which is invalid.
  3. Final Answer:

    { $replaceRoot: { newRoot: "$details" } } -> Option A
  4. Quick Check:

    Use newRoot: "$field" syntax [OK]
Hint: Use newRoot: "$fieldName" exactly [OK]
Common Mistakes:
  • Omitting quotes around field path
  • Using wrong key like 'root' instead of 'newRoot'
  • Combining stages incorrectly
3. Given the collection documents:
{ "name": "Alice", "info": { "age": 30, "city": "NY" } }

What will be the output of this aggregation?
[{ $replaceRoot: { newRoot: "$info" } }]
medium
A. [{ "name": "Alice", "info": { "age": 30, "city": "NY" } }]
B. [{ "age": 30, "city": "NY" }]
C. [{ "info": { "age": 30, "city": "NY" } }]
D. [{ "age": 30 }]

Solution

  1. Step 1: Understand $replaceRoot effect

    The stage replaces the whole document with the content of the info field.
  2. Step 2: Apply to given document

    Original document has info as { "age": 30, "city": "NY" }, so output document is exactly that object.
  3. Final Answer:

    [{ "age": 30, "city": "NY" }] -> Option B
  4. Quick Check:

    Root replaced by info field content [OK]
Hint: Output matches the nested field content exactly [OK]
Common Mistakes:
  • Expecting original fields to remain
  • Confusing nested field with root
  • Selecting wrong output format
4. You wrote this aggregation but it throws an error:
[{ $replaceRoot: { newRoot: info } }]

What is the error and how to fix it?
medium
A. Missing quotes around field path; fix with newRoot: "$info".
B. Wrong operator; use $setRoot instead of $replaceRoot.
C. Field info does not exist; add it first.
D. Aggregation pipeline must be an object, not an array.

Solution

  1. Step 1: Identify syntax error in newRoot value

    The field path must be a string starting with "$" to indicate a field reference.
  2. Step 2: Correct the syntax

    Change newRoot: info to newRoot: "$info" to fix the error.
  3. Final Answer:

    Missing quotes around field path; fix with newRoot: "$info". -> Option A
  4. Quick Check:

    Field paths need quotes and $ prefix [OK]
Hint: Always quote field paths with $ prefix [OK]
Common Mistakes:
  • Omitting quotes around field names
  • Confusing $replaceRoot with $setRoot
  • Misunderstanding pipeline array structure
5. You have documents:
{ "user": { "id": 1, "name": "Bob" }, "score": 50 }

How do you write an aggregation pipeline using $replaceRoot to make the output documents only contain the user fields plus the score field at the root level?
hard
A. [{ $replaceRoot: { newRoot: "$score" } }]
B. [{ $replaceRoot: { newRoot: "$user" } }, { $addFields: { score: "$score" } }]
C. [{ $project: { user: 1, score: 1 } }]
D. [{ $replaceRoot: { newRoot: { $mergeObjects: ["$user", { score: "$score" }] } } }]

Solution

  1. Step 1: Understand the goal

    We want to flatten user fields to root and keep score alongside.
  2. Step 2: Use $mergeObjects inside $replaceRoot

    $mergeObjects combines user object and { score: "$score" } into one root document.
  3. Step 3: Check options

    [{ $replaceRoot: { newRoot: { $mergeObjects: ["$user", { score: "$score" }] } } }] correctly merges and replaces root. [{ $replaceRoot: { newRoot: "$user" } }, { $addFields: { score: "$score" } }] tries to add fields after replacing root, but score is lost after first stage. [{ $project: { user: 1, score: 1 } }] only projects fields, not restructuring. [{ $replaceRoot: { newRoot: "$score" } }] replaces root with score only, losing user.
  4. Final Answer:

    [{ $replaceRoot: { newRoot: { $mergeObjects: ["$user", { score: "$score" }] } } }] -> Option D
  5. Quick Check:

    Use $mergeObjects to combine fields [OK]
Hint: Combine objects with $mergeObjects inside $replaceRoot [OK]
Common Mistakes:
  • Replacing root with only one field losing others
  • Trying to add fields after $replaceRoot without preserving data
  • Using $project instead of restructuring
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