Explorer
MongoDB

Find all products where `stock` is less than `5`, add a field `needsRestock` set to `true`, and project only `name`, `stock`, and `needsRestock`.

Problem Statement

<p>Find all <code>products</code> where <code>stock</code> is less than <code>5</code>, add a field <code>needsRestock</code> set to <code>true</code>, and project only <code>name</code>, <code>stock</code>, and <code>needsRestock</code>.</p>

Examples

Input: products collection: +-----+----------+-------+-------+ | _id | name | stock | price | +-----+----------+-------+-------+ | 1 | Widget A | 3 | 10 | | 2 | Widget B | 50 | 20 | | 3 | Widget C | 1 | 15 | | 4 | Widget D | 10 | 25 | +-----+----------+-------+-------+

Output: +----------+-------+--------------+ | name | stock | needsRestock | +----------+-------+--------------+ | Widget A | 3 | true | | Widget C | 1 | true | +----------+-------+--------------+

Explanation: Documents containing the matching array elements are selected from the collection.

Complexity

Time Complexity: -

Space Complexity: -

Hints

šŸ’” Hint 1: Use the $project stage in an aggregation pipeline to include, exclude, or compute new document fields. šŸ’” Hint 2: Set fields to 1 (include) or 0 (exclude), and use expression operators to reshape data. šŸ’” Hint 3: Finalize the pipeline and execute with .toArray() to return the structured document array.

Editorial & Approach

Problem Overview & Intuition

To solve "Inventory Restocking Alert", we query the MongoDB document store. The goal is to find all products where `stock` is less than `5`, add a field `needsrestock` set to `true`, and project only `name`, `stock`, and `needsrestock`. Using an aggregation pipeline, the database engine filters and structures the BSON documents efficiently.

Step-by-Step Approach

  1. Identify Target Collection: Access the collection through the db instance.
  2. Construct Query / Pipeline: Build the aggregation stages ($match, $group, $sort, etc.).
  3. Resolve Cursor: Invoke .toArray() to transform the query cursor into the required array of documents.

Optimal Implementation (MongoDB)

function solve(db) {
  return db.products.aggregate([
    { $match: { stock: { $lt: 5 } } },
    { $addFields: { needsRestock: true } },
    { $project: { _id: 0, name: 1, stock: 1, needsRestock: 1 } }
  ]);
}

Complexity Analysis

Time Complexity O(N) pipeline traversal through aggregation stages.
Space Complexity O(M) intermediate document buffer in aggregation pipeline.

Key Considerations & Edge Cases

  • Empty Collections: If no documents match, the query cleanly returns an empty array [].
  • Missing / NULL Fields: Missing fields in documents are handled safely without throwing runtime exceptions.
  • Type Coercion: BSON types (ObjectId, Numbers, Strings) are compared strictly according to MongoDB specifications.

Inventory Restocking Alert

Hard

Find all products where stock is less than 5, add a field needsRestock set to true, and project only name, stock, and needsRestock.

Example Scenarios
1Example 1
Input:
products collection
_idnamestockprice
1Widget A310
2Widget B5020
3Widget C115
4Widget D1025
Output:
namestockneedsRestock
Widget A3true
Widget C1true
Explanation:

Documents containing the matching array elements are selected from the collection.

MongoDB Editor
Loading Editor...
Query Results (JSON)

Run your MongoDB code to see results here.