Skip to main content

Case statement in MongoDB query - aggregation

Using $cond (aggregation) we can perform case statement in MongoDB

SQL query:

SELECT fName,lName, (CASE WHEN totalOrder > 70 THEN 'Golden' ELSE 'Silver' END) AS UserType  FROM dbo.Users

In above query I am trying to apart user on the basis of UserType, on condition totalOrder. When totalOrder>70 then "Golden" otherwise "Silver".

Same scenario we can perform in MongoDB using $cond.


Syntax:

{ $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case-> } }

Or:

{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }


Example:

Insert Document in Users Collection


{
    "fName" : "Dilip",
    "lName" : "Singh",
    "address" : "Noida",
    "totalOrder" : 150,
    "createdDate" : "2014/07/07"
}

{
    "fName" : "Vipul",
    "lName" : "Bhatt",
    "address" : "Delhi",
    "totalOrder" : 50,
    "createdDate" : "2013/07/07"
}

{
    "fName" : "Brijesh",
    "lName" : "Kumar",
    "address" : "Gorakhpur",
    "totalOrder" : 70,
    "createdDate" : "2012/07/07"
}


{
    "fName" : "Raj",
    "lName" : "Kumar",
    "address" : "Bokaro",
    "totalOrder" : 40,
    "createdDate" : "2010/07/07"
}




The following aggregation operation uses the $cond expression to set the UserType value to "Golden" when totalOrder is greater than 70 and UserType value to "Silver" in else condition.


db.Users.aggregate(
   [
      {
         $project:
           {
            fName :1,
             lName:1,
             UserType:
               {
                 $cond: { if: { $gte: [ "$totalOrder", 70 ] }, then: 'Golden', else: 'Silver' }
               }
           }
      }
   ]
)




Result:


/* 0 */
{
    "result" : [
        {
            "_id" : ObjectId("55dac0b31c949abf34d5daed"),
            "fName" : "Dilip",
            "lName" : "Singh",
            "UserType" : "Golden"
        },
        {
            "_id" : ObjectId("55dac0c21c949abf34d5daf1"),
            "fName" : "Vipul",
            "lName" : "Bhatt",
            "UserType" : "Silver"
        },
        {
            "_id" : ObjectId("55dac0d11c949abf34d5daf2"),
            "fName" : "Brijesh",
            "lName" : "Kumar",
            "UserType" : "Golden"
        },
        {
            "_id" : ObjectId("55dac0e31c949abf34d5daf3"),
            "fName" : "Raj",
            "lName" : "Kumar",
            "UserType" : "Silver"
        }
    ],
    "ok" : 1
}

Popular posts from this blog

Remove special character from string in MongoDB

Problem: Suppose wehave a collection and one field is type string contains some special character (like !@#$%) and we don’t want these special character.
Solution: We can easily remove the special character from field using script “replace(/[^a-zA-Z 0-9 ]/g, '')” in our query.  How can we remove special character from string using this script please see following example.
Example: Suppose we have a collection “EduSurvey “where we are collecting information from institutions.

{Name:"JB institute”, About:"This is good one collage for MBA", Information:"This $%%institute ##has good faculty etc$$"}
{Name:"MK institute”, About:"This is good one collage for MCA", Information:"This$$%# is the dummy text12"}
{Name:"MG institute”, About:"This is good one collage for B,Tech", Information:"This# institute@ has&* good infrastructure"}

Did you notice Information fields contains some special character so we…

Add day to ISODate in MongoDB

We can use $add operator to add days in ISODate in mongodb, $add is the Arithmetic Aggregation Operator which adds number and date in mongodb.
Syntax:

{ $add: [ <expression1>, <expression2>, ... ] }

Note:  If one of the argument is date $add operator treats to other arguments as milliseconds to add to the date.
Example: Suppose we have a Test collection as below.

{"Title" : "Add day to ISODate in MongoBD","CreatedDate" : ISODate("2016-07-07T08:00:00.000Z")}

Query to add 2 days in CreatedDate

db.Test.aggregate([      { $project: { Title: 1, AddedDate: { $add: [ "$CreatedDate", 2*24*60*60000 ] } } }    ])

Result:

{ "_id" : ObjectId("579a1567ac1b3f3732483de0"), "Title" : "Add day to ISODate in MongoBD", "AddedDate" : ISODate("2016-07-09T08:00:00.000Z") }

Note: As mentioned in above note we have to convert days in millisecond because $add operator treat to other arg…