$switch

The `$switch` operator is used to evaluate a series of conditions and return a value based on the first condition that evaluates to true.

Syntax

{
  $switch: {
    branches: [
      { case: <expression>, then: <expression> },
      { case: <expression>, then: <expression> }
    ],
    default: <expression>
  }
}

Parameters

branchesobjectrequired

An array of documents, each containing case and then expressions

caseobjectrequired

An expression that evaluates to either `true` or `false`

thenobjectrequired

The expression to return if the associated `case` expression evaluates to `true`

defaultobject

The expression to return if none of the `case` expressions evaluate to `true`

Examples

Determine staff type based on counts

This query determines the type of staff based on their count.

Query:

db.stores.aggregate([{
        $project: {
            name: 1,
            staffType: {
                $switch: {
                    branches: [{
                            case: { $eq: ["$staff.totalStaff.partTime", 0] },
                            then: "Only Full time"
                        },
                        {
                            case: { $eq: ["$staff.totalStaff.fullTime", 0] },
                            then: "Only Part time"
                        }
                    ],
                    default: "Both"
                }
            }
        }
    },
    { $limit: 3 }
])

Output:

[
  { "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5", "name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile", "staffType": "Only Full time" },
  { "_id": "649626c9-eda1-46c0-a27f-dcee19d97f41", "name": "VanArsdel, Ltd. | Musical Instrument Outlet - East Cassie", "staffType": "Both" },
  { "_id": "8345de34-73ec-4a99-9cb6-a81f7b145c34", "name": "Northwind Traders | Bed and Bath Place - West Oraland", "staffType": "Both" }
]

Related