Bird
Raised Fist0
MongoDBquery~5 mins

Conditional expressions ($cond, $switch) in MongoDB - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the $cond operator do in MongoDB?
The $cond operator works like an if-then-else statement. It checks a condition and returns one value if true, and another if false.
Click to reveal answer
intermediate
How is the $switch operator different from $cond?
$switch lets you check multiple conditions in order, like a switch-case statement. It returns the value for the first true condition.
Click to reveal answer
beginner
Write a simple $cond expression to check if a field score is greater than 50 and return 'Pass' or 'Fail'.
{ $cond: { if: { $gt: ["$score", 50] }, then: "Pass", else: "Fail" } }
Click to reveal answer
intermediate
What happens if none of the conditions in $switch match and no default is provided?
If no conditions match and no default is set, $switch returns null.
Click to reveal answer
beginner
Why are conditional expressions useful in MongoDB aggregation?
They let you create new fields or change values based on conditions, making your data queries smarter and more flexible.
Click to reveal answer
Which operator in MongoDB acts like an if-then-else statement?
A$match
B$switch
C$cond
D$group
What does $switch do when multiple conditions are true?
AReturns the value of the last true condition
BReturns the value of the first true condition
CReturns all matching values
DReturns null
In a $cond expression, what does the else part represent?
AValue if condition is false
BThe field name
CThe condition to check
DValue if condition is true
If no conditions match in $switch and no default is set, what is returned?
Anull
BThe first condition's value
CAn error
DAn empty string
Which of these is a valid use of $cond?
ATo filter documents in a collection
BTo sort documents
CTo group documents by a field
DTo assign a value based on a condition
Explain how the $cond operator works in MongoDB and give a simple example.
Think of it like an if-else statement in programming.
You got /4 concepts.
    Describe the purpose of the $switch operator and how it handles multiple conditions.
    It is similar to switch-case statements in programming languages.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the $cond operator do in a MongoDB aggregation pipeline?
      easy
      A. It chooses a value based on a simple if-else condition.
      B. It sorts documents by a field value.
      C. It groups documents by a key.
      D. It removes duplicate documents.

      Solution

      1. Step 1: Understand the purpose of $cond

        $cond is used to evaluate a condition and return one value if true, another if false, similar to if-else logic.
      2. Step 2: Compare with other options

        Sorting, grouping, and removing duplicates are done by other operators like $sort, $group, and $addToSet, not $cond.
      3. Final Answer:

        It chooses a value based on a simple if-else condition. -> Option A
      4. Quick Check:

        $cond = if-else logic [OK]
      Hint: Remember $cond is like a simple if-else choice [OK]
      Common Mistakes:
      • Confusing $cond with $group or $sort
      • Thinking $cond filters documents
      • Assuming $cond handles multiple cases like $switch
      2. Which of the following is the correct syntax for using $cond in a MongoDB aggregation pipeline?
      easy
      A. { $cond: [ <condition>, <trueValue>, <falseValue> ] }
      B. { $cond: { if: <condition>, then: <trueValue>, else: <falseValue> } }
      C. { $cond: { case: <condition>, then: <trueValue>, else: <falseValue> } }
      D. { $cond: { when: <condition>, then: <trueValue>, else: <falseValue> } }

      Solution

      1. Step 1: Recall $cond syntax

        The $cond operator uses an array with three elements: condition, true value, false value.
      2. Step 2: Check options

        { $cond: [ <condition>, <trueValue>, <falseValue> ] } matches the correct array syntax. Options A, C, and D use incorrect keys or object format.
      3. Final Answer:

        { $cond: [ <condition>, <trueValue>, <falseValue> ] } -> Option A
      4. Quick Check:

        $cond syntax = array with 3 elements [OK]
      Hint: Use array syntax: condition, true, false for $cond [OK]
      Common Mistakes:
      • Using object keys like if/then/else instead of array
      • Confusing $cond with $switch syntax
      • Missing one of the three required elements
      3. Given the following aggregation stage, what will be the value of the field status for a document with score: 75?
      {
        $addFields: {
          status: {
            $switch: {
              branches: [
                { case: { $gte: ["$score", 90] }, then: "Excellent" },
                { case: { $gte: ["$score", 70] }, then: "Good" },
                { case: { $gte: ["$score", 50] }, then: "Average" }
              ],
              default: "Poor"
            }
          }
        }
      }
      medium
      A. "Poor"
      B. "Excellent"
      C. "Average"
      D. "Good"

      Solution

      1. Step 1: Evaluate $switch branches in order

        The first branch checks if score >= 90 (75 >= 90? No). The second checks if score >= 70 (75 >= 70? Yes).
      2. Step 2: Determine matching branch and output

        Since the second branch matches, the status is set to "Good". Later branches are ignored.
      3. Final Answer:

        "Good" -> Option D
      4. Quick Check:

        $switch picks first true case = "Good" [OK]
      Hint: Check $switch branches top to bottom, pick first true [OK]
      Common Mistakes:
      • Ignoring order of branches in $switch
      • Choosing default instead of matching branch
      • Confusing $gte logic
      4. Identify the issue in this aggregation expression using $switch:
      {
        $project: {
          grade: {
            $switch: {
              branches: [
                { case: { $gt: ["$score", 90] }, then: "A" },
                { case: { $gt: ["$score", 80] }, then: "B" }
              ]
            }
          }
        }
      }
      medium
      A. Branches array must be outside $switch object.
      B. Missing default value in $switch returns null for unmatched cases.
      C. Using $gt instead of $gte is invalid syntax.
      D. The $project stage cannot use $switch.

      Solution

      1. Step 1: Check $switch structure

        $switch requires branches; default is optional but without it returns null when no branch matches.
      2. Step 2: Identify missing default

        The expression lacks a default field, so if score <= 80, grade is null.
      3. Final Answer:

        Missing default value in $switch returns null for unmatched cases. -> Option B
      4. Quick Check:

        $switch missing default = null [OK]
      Hint: Always include default in $switch to avoid errors [OK]
      Common Mistakes:
      • Omitting default field in $switch
      • Thinking $gt is invalid syntax
      • Misplacing branches array
      5. You want to categorize products by price using $switch in an aggregation pipeline. Prices below 20 are "Cheap", 20 to 50 are "Moderate", above 50 are "Expensive". Which of the following $switch expressions correctly implements this?
      hard
      A. { $switch: { branches: [ { case: { $gte: ["$price", 50] }, then: "Expensive" }, { case: { $gte: ["$price", 20] }, then: "Moderate" }, { case: { $lt: ["$price", 20] }, then: "Cheap" } ], default: "Unknown" } }
      B. { $switch: { branches: [ { case: { $lte: ["$price", 20] }, then: "Cheap" }, { case: { $lt: ["$price", 50] }, then: "Moderate" }, { case: { $gte: ["$price", 50] }, then: "Expensive" } ], default: "Unknown" } }
      C. { $switch: { branches: [ { case: { $lt: ["$price", 20] }, then: "Cheap" }, { case: { $and: [ { $gte: ["$price", 20] }, { $lte: ["$price", 50] } ] }, then: "Moderate" }, { case: { $gt: ["$price", 50] }, then: "Expensive" } ], default: "Unknown" } }
      D. { $switch: { branches: [ { case: { $gte: ["$price", 50] }, then: "Expensive" }, { case: { $lte: ["$price", 20] }, then: "Cheap" }, { case: { $and: [ { $gt: ["$price", 20] }, { $lt: ["$price", 50] } ] }, then: "Moderate" } ], default: "Unknown" } }

      Solution

      1. Step 1: Analyze price ranges and conditions

        Prices below 20 are "Cheap", 20 to 50 inclusive are "Moderate", above 50 are "Expensive". Conditions must be mutually exclusive and cover all cases.
      2. Step 2: Check each option's logic

        { $switch: { branches: [ { case: { $lt: ["$price", 20] }, then: "Cheap" }, { case: { $and: [ { $gte: ["$price", 20] }, { $lte: ["$price", 50] } ] }, then: "Moderate" }, { case: { $gt: ["$price", 50] }, then: "Expensive" } ], default: "Unknown" } } correctly uses $lt for below 20, $and with $gte and $lte for 20 to 50, and $gt for above 50. Others have overlapping or incorrect ranges.
      3. Final Answer:

        { $switch: { branches: [ { case: { $lt: ["$price", 20] }, then: "Cheap" }, { case: { $and: [ { $gte: ["$price", 20] }, { $lte: ["$price", 50] } ] }, then: "Moderate" }, { case: { $gt: ["$price", 50] }, then: "Expensive" } ], default: "Unknown" } } -> Option C
      4. Quick Check:

        Use clear, non-overlapping conditions in $switch branches [OK]
      Hint: Use clear, non-overlapping conditions with $and for ranges [OK]
      Common Mistakes:
      • Overlapping ranges causing wrong category
      • Using incorrect comparison operators
      • Not covering all price values
      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