Uploaded image for project: 'C# Driver'
  1. C# Driver
  2. CSHARP-1629

Add a $switch expression

    XMLWordPrintable

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Won't Fix
    • Affects Version/s: None
    • Fix Version/s: 2.4
    • Component/s: Linq
    • Labels:
      None
    • Sprint:
      C# Sprint 41

      Description

      Syntax

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

      Examples

      > db.coll.insert([
        {_id: 0, x: 0}
        {_id: 1, x: -1}
        {_id: 2, x: 2}
      ]);
      > db.coll.aggregate([{
        $project: {
          z: {
            $switch: {
              branches: [
                {
                  case: {$eq: ["$x", 0]},
                  then: "Equal to zero."
                },
                {
                  case: {$eq: [{$abs: "$x"}, 1]},
                  then: "Equal to plus or minus one."
                },
              ],
              default: "Something else."
            }
          }
        }
      }])
      {_id: 0, z: "Equal to zero."}
      {_id: 1, z: "Equal to plus or minus one."}
      {_id: 2, z: "Something else."}
      

      Notes

      • Allows $project expressions to be written without convoluted $conds.
      • If "case" does not return a boolean, the value will be coerced to a bool.
      • Since each case does not have to be mutually exclusive, an input will enter the first branch it matches.
        Errors
      • 'branches' is missing or not an array with at least one entry.
      • An entry in 'branches' does not contain 'case'
      • An entry in 'branches' does not contain 'then'
      • If 'default' is not specified, and an input doesn't match, an error will be thrown.

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: