Bird
Raised Fist0
Expressframework~20 mins

Finding and querying documents in Express - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Express Query Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this Express route when querying documents?

Consider this Express route that queries a MongoDB collection for users with age greater than 25:

app.get('/users', async (req, res) => {
  const users = await User.find({ age: { $gt: 25 } });
  res.json(users);
});

What will the response contain?

Express
app.get('/users', async (req, res) => {
  const users = await User.find({ age: { $gt: 25 } });
  res.json(users);
});
AA JSON array of all user documents regardless of age
BA JSON array of user documents where each user's age is greater than 25
CA JSON object with a single user document where age equals 25
DAn error because $gt is not a valid query operator
Attempts:
2 left
💡 Hint

Think about what the MongoDB $gt operator does in a query.

📝 Syntax
intermediate
2:00remaining
Which option correctly queries documents with multiple conditions in Express?

You want to find all products with price less than 100 and category 'books'. Which query is correct?

Express
const products = await Product.find( /* your query here */ );
A{ price: { $lt: 100 }, category: 'books' }
B{ price: { $lt: 100 } && category: 'books' }
C{ price: { $lt: 100 }, category == 'books' }
D{ price: { $lt: 100 }, category: ['books'] }
Attempts:
2 left
💡 Hint

Remember how to write multiple conditions in a MongoDB query object.

🔧 Debug
advanced
2:00remaining
Why does this Express query return an empty array unexpectedly?

Given this code:

app.get('/search', async (req, res) => {
  const term = req.query.term;
  const results = await Item.find({ name: { $regex: term } });
  res.json(results);
});

Users report no results even when matching items exist. What is the likely cause?

Express
app.get('/search', async (req, res) => {
  const term = req.query.term;
  const results = await Item.find({ name: { $regex: term } });
  res.json(results);
});
AThe query should use $text instead of $regex for string matching
BThe $regex operator is invalid in MongoDB queries
CThe regex is case-sensitive by default, so matches may fail if case differs
DThe term variable is undefined because req.query.term is missing
Attempts:
2 left
💡 Hint

Think about how MongoDB regex queries handle letter case.

state_output
advanced
2:00remaining
What is the value of 'count' after this Express route runs?

Consider this route that counts documents matching a condition:

app.get('/count', async (req, res) => {
  const count = await Order.countDocuments({ status: 'shipped' });
  res.send(`Shipped orders: ${count}`);
});

If there are 7 orders with status 'shipped', what will be sent in the response?

Express
app.get('/count', async (req, res) => {
  const count = await Order.countDocuments({ status: 'shipped' });
  res.send(`Shipped orders: ${count}`);
});
AShipped orders: 7
BShipped orders: undefined
CShipped orders: 0
DAn error because countDocuments is not a function
Attempts:
2 left
💡 Hint

Recall what countDocuments returns when documents match the query.

🧠 Conceptual
expert
3:00remaining
Which option best explains the difference between find() and findOne() in Express MongoDB queries?

When querying MongoDB in Express, what is the key difference between find() and findOne() methods?

A<code>find()</code> requires a callback; <code>findOne()</code> only supports promises
B<code>find()</code> returns a single document; <code>findOne()</code> returns an array of documents
C<code>find()</code> modifies documents; <code>findOne()</code> only reads documents
D<code>find()</code> returns an array of all matching documents; <code>findOne()</code> returns the first matching document or null
Attempts:
2 left
💡 Hint

Think about the return types of these methods.

Practice

(1/5)
1. In Express with Mongoose, which method is used to find all documents matching a condition in a collection?
easy
A. Model.delete()
B. Model.create()
C. Model.update()
D. Model.find()

Solution

  1. Step 1: Understand the purpose of Model.find()

    This method retrieves documents from the database that match the given query conditions.
  2. Step 2: Differentiate from other methods

    Model.create() adds new documents, Model.update() modifies existing ones, and Model.delete() removes documents.
  3. Final Answer:

    Model.find() -> Option D
  4. Quick Check:

    Find documents = Model.find() [OK]
Hint: Use find() to get matching documents [OK]
Common Mistakes:
  • Confusing find() with create()
  • Using update() to retrieve documents
  • Trying to delete documents to find them
2. Which of the following is the correct syntax to find all users with age 30 using Mongoose in Express?
easy
A. User.find({ age: 30 })
B. User.find(age == 30)
C. User.find('age: 30')
D. User.find({ 'age' = 30 })

Solution

  1. Step 1: Use an object to specify query conditions

    The query must be an object with key-value pairs, like { age: 30 }.
  2. Step 2: Check syntax correctness

    User.find({ age: 30 }) uses correct JavaScript object syntax. Options B, C, and D have syntax errors or wrong formats.
  3. Final Answer:

    User.find({ age: 30 }) -> Option A
  4. Quick Check:

    Query object syntax = User.find({ age: 30 }) [OK]
Hint: Use curly braces with key: value for queries [OK]
Common Mistakes:
  • Using comparison operators inside find()
  • Passing query as a string
  • Using assignment (=) instead of colon (:) in object
3. What will be the output of this code snippet in Express using Mongoose?
const users = await User.find({ active: true }, 'name email');
console.log(users);
medium
A. An array of user objects with only 'name' and 'email' fields
B. An array of user objects with all fields including 'active'
C. A single user object with 'name' and 'email' fields
D. An error because projection syntax is wrong

Solution

  1. Step 1: Understand the query parameters

    The first argument is the filter { active: true }, so only active users are returned.
  2. Step 2: Understand the projection string

    The second argument 'name email' selects only these fields to be included in the returned documents.
  3. Final Answer:

    An array of user objects with only 'name' and 'email' fields -> Option A
  4. Quick Check:

    Projection limits fields = An array of user objects with only 'name' and 'email' fields [OK]
Hint: Second argument in find() selects fields to return [OK]
Common Mistakes:
  • Expecting all fields to be returned
  • Thinking projection returns a single object
  • Using wrong projection syntax causing errors
4. Identify the error in this Mongoose query:
const results = await Product.find({ price: { $gt: 100 } }, { name, price });
medium
A. The find method cannot use async/await
B. The query operator $gt is invalid
C. The projection object is missing quotes around field names
D. The filter object should be a string

Solution

  1. Step 1: Check the projection argument

    The projection should be an object with field names as strings or keys, like { name: 1, price: 1 }.
  2. Step 2: Identify the syntax error

    Using { name, price } without values or quotes is invalid JavaScript object syntax here.
  3. Final Answer:

    The projection object is missing quotes around field names -> Option C
  4. Quick Check:

    Projection keys must be strings or key-value pairs [OK]
Hint: Projection keys need explicit values or quotes [OK]
Common Mistakes:
  • Using shorthand object keys without values in projection
  • Misunderstanding $gt operator
  • Thinking async/await is invalid with find()
5. You want to find all orders where the status is 'shipped' and the total is greater than 50, but only return the order ID and total fields. Which is the correct Mongoose query in Express?
hard
A. Order.find({ status: 'shipped', total: { $gt: 50 } }, { _id: 1, total: 1 })
B. Order.find({ status: 'shipped', total: { $gt: 50 } }, '_id total')
C. Order.find({ status: 'shipped', total: { $gt: 50 } }, { _id: true, total: true })
D. Order.find({ status: 'shipped' && total > 50 }, '_id total')

Solution

  1. Step 1: Write the correct filter object

    The filter must be { status: 'shipped', total: { $gt: 50 } } to find orders with status 'shipped' and total greater than 50.
  2. Step 2: Use correct projection syntax

    Passing a string with space-separated field names like '_id total' is valid for projection in Mongoose.
  3. Step 3: Evaluate options

    Order.find({ status: 'shipped', total: { $gt: 50 } }, { _id: 1, total: 1 }) uses an object projection with 1s which is valid but the question asks for the best correct query. Order.find({ status: 'shipped', total: { $gt: 50 } }, '_id total') uses string projection which is simpler and correct. Order.find({ status: 'shipped' && total > 50 }, '_id total') has invalid filter syntax. Order.find({ status: 'shipped', total: { $gt: 50 } }, { _id: true, total: true }) uses boolean true instead of 1 which is invalid in Mongoose projection.
  4. Final Answer:

    Order.find({ status: 'shipped', total: { $gt: 50 } }, '_id total') -> Option B
  5. Quick Check:

    Filter object + string projection = Order.find({ status: 'shipped', total: { $gt: 50 } }, '_id total') [OK]
Hint: Use object for filter, string for projection fields [OK]
Common Mistakes:
  • Using logical operators incorrectly in filter
  • Using boolean true instead of 1 in projection
  • Passing projection as object with invalid values