Bird
Raised Fist0
MongoDBquery~30 mins

Querying nested fields at any depth in MongoDB - Mini Project: Build & Apply

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Querying Nested Fields at Any Depth in MongoDB
📖 Scenario: You are managing a MongoDB collection that stores information about books in a library. Each book document contains nested fields for details like author information and publisher contacts. You want to learn how to query these nested fields no matter how deeply they are nested.
🎯 Goal: Build a MongoDB query that finds all books where the publisher's contact email matches a specific value, demonstrating how to query nested fields at any depth.
📋 What You'll Learn
Create a collection named books with nested documents for author and publisher.
Add a configuration variable for the target publisher email to search for.
Write a MongoDB query that finds all books with the publisher's contact email matching the target email.
Complete the query by projecting only the book title and publisher contact email.
💡 Why This Matters
🌍 Real World
Many real-world databases store complex nested data like user profiles, product details, or logs. Knowing how to query nested fields helps you find exactly what you need quickly.
💼 Career
Database developers and data analysts often work with nested JSON-like data in MongoDB. Mastering nested queries is essential for efficient data retrieval and manipulation.
Progress0 / 4 steps
1
DATA SETUP: Create the books collection with nested fields
Create a MongoDB collection called books and insert these two documents exactly:
1) { title: "Learn MongoDB", author: { name: "Alice" }, publisher: { name: "TechBooks", contact: { email: "contact@techbooks.com" } } }
2) { title: "Advanced Databases", author: { name: "Bob" }, publisher: { name: "DataPress", contact: { email: "info@datapress.com" } } }
MongoDB
Hint

Use db.books.insertMany() with an array of two documents matching the exact structure and values.

2
CONFIGURATION: Define the target publisher email to search for
Create a variable called targetEmail and set it to the string "contact@techbooks.com".
MongoDB
Hint

Use const targetEmail = "contact@techbooks.com"; to define the variable.

3
CORE LOGIC: Write a query to find books by publisher contact email
Write a MongoDB query using db.books.find() to find all documents where the nested field publisher.contact.email equals the variable targetEmail.
MongoDB
Hint

Use dot notation in the query object: { "publisher.contact.email": targetEmail }.

4
COMPLETION: Project only the book title and publisher contact email
Complete the query by adding a projection to return only the title and publisher.contact.email fields.
MongoDB
Hint

Use the second argument of find() to specify the projection fields.

Practice

(1/5)
1. Which MongoDB query syntax correctly accesses a nested field named address.city inside a document?
easy
A. { address.city() : "New York" }
B. { address: { city: "New York" } }
C. { "address->city": "New York" }
D. { "address.city": "New York" }

Solution

  1. Step 1: Understand dot notation for nested fields

    MongoDB uses dot notation like "address.city" to access nested fields inside documents.
  2. Step 2: Identify correct query syntax

    The correct query uses a string key with dot notation: { "address.city": "New York" }.
  3. Final Answer:

    { "address.city": "New York" } -> Option D
  4. Quick Check:

    Dot notation = { "address.city": value } [OK]
Hint: Use quotes and dot notation to access nested fields [OK]
Common Mistakes:
  • Using nested objects instead of dot notation in query
  • Using arrow or parentheses instead of dot notation
  • Not quoting the nested field path
2. Which of the following is the correct MongoDB query to find documents where the nested field profile.details.age equals 30?
easy
A. { profile.details.age = 30 }
B. { "profile.details.age": 30 }
C. { profile.details.age: 30 }
D. { 'profile.details.age' == 30 }

Solution

  1. Step 1: Use string keys with dot notation in MongoDB queries

    MongoDB requires the nested field path as a string key with dots, like "profile.details.age".
  2. Step 2: Use colon for key-value pairs in query objects

    The correct syntax uses colon (:), not equals (=) or double equals (==), so { "profile.details.age": 30 } is correct.
  3. Final Answer:

    { "profile.details.age": 30 } -> Option B
  4. Quick Check:

    Dot notation with colon = correct query [OK]
Hint: Use colon and quotes for nested keys in queries [OK]
Common Mistakes:
  • Using = or == instead of colon in query
  • Not quoting the nested field path
  • Using object notation instead of dot notation
3. Given the collection documents:
{ "user": { "contact": { "email": "a@example.com" } } }, { "user": { "contact": { "email": "b@example.com" } } }, { "user": { "contact": { "phone": "12345" } } }

What will the query db.collection.find({ "user.contact.email": { $exists: true } }) return?
medium
A. Documents where user.contact has any field
B. Documents where user.contact.phone exists
C. Documents where user.contact.email exists
D. All documents in the collection

Solution

  1. Step 1: Understand $exists operator with nested fields

    The query checks if the nested field "user.contact.email" exists in documents.
  2. Step 2: Identify which documents have that nested field

    Only the first two documents have "user.contact.email"; the third has "user.contact.phone" instead.
  3. Final Answer:

    Documents where user.contact.email exists -> Option C
  4. Quick Check:

    $exists true filters documents with that nested field [OK]
Hint: Use $exists to check nested field presence [OK]
Common Mistakes:
  • Assuming $exists checks parent fields
  • Confusing email and phone fields
  • Expecting all documents to match
4. You wrote this query to find documents where profile.address.zipcode is "12345":
db.users.find({ profile.address.zipcode: "12345" })

But it gives a syntax error. What is the fix?
medium
A. Use quotes around the nested field: { "profile.address.zipcode": "12345" }
B. Replace dots with underscores: { profile_address_zipcode: "12345" }
C. Use double equals: { "profile.address.zipcode" == "12345" }
D. Remove the nested field and query only { zipcode: "12345" }

Solution

  1. Step 1: Identify syntax error cause

    MongoDB requires string keys with dot notation quoted in queries to avoid syntax errors.
  2. Step 2: Correct query syntax

    Wrap the nested field path in quotes: { "profile.address.zipcode": "12345" } fixes the syntax error.
  3. Final Answer:

    Use quotes around the nested field: { "profile.address.zipcode": "12345" } -> Option A
  4. Quick Check:

    Quotes fix dot notation syntax errors [OK]
Hint: Always quote nested field keys in queries [OK]
Common Mistakes:
  • Not quoting nested field keys
  • Using == instead of colon
  • Replacing dots with underscores incorrectly
5. You have documents with deeply nested fields like settings.preferences.notifications.email.enabled. How would you write a MongoDB query to find all documents where email notifications are enabled (true), regardless of nesting depth?
hard
A. { "settings.preferences.notifications.email.enabled": true }
B. { settings: { preferences: { notifications: { email: { enabled: true } } } } }
C. { "email.enabled": true }
D. { "settings.preferences.notifications.email.enabled": { $eq: "true" } }

Solution

  1. Step 1: Use dot notation string to access deeply nested field

    MongoDB queries use dot notation strings to reach any depth, so "settings.preferences.notifications.email.enabled" is correct.
  2. Step 2: Match boolean value correctly

    Use true (boolean) without quotes to match enabled field, so { "settings.preferences.notifications.email.enabled": true } is correct.
  3. Final Answer:

    { "settings.preferences.notifications.email.enabled": true } -> Option A
  4. Quick Check:

    Dot notation + boolean value = correct query [OK]
Hint: Use full dot path with boolean true (no quotes) [OK]
Common Mistakes:
  • Using nested objects instead of dot notation
  • Quoting boolean true as string
  • Using partial nested paths