w3resource

MongoDB: db.collection.group() method

db.collection.group

The db.collection.group() method is used to Groups documents in a collection by the specified keys and performs simple aggregation functions such as computing counts and sums.

Syntax:

db.collection.group({ key, reduce, initial [, keyf] [, cond] [, finalize] })

Parameters:

The db.collection.group() accepts a single document that contains the following:

Name Description Required /
Optional
Type
key The field or fields to the group. Returns a key object for use as the grouping key. Required document
reduce An aggregation function that operates on the documents during the grouping operation. These functions may return a sum or a count. The function takes two arguments: the current document and an aggregation result document for that group. Required function
initial Initializes the aggregation result document. Required initial
keyf Alternative to the key field. Specifies a function that creates a key object for use as the grouping key. Use keyf instead of key to group by calculated fields rather than existing document fields. Optional function
cond The selection criteria to determine which documents in the collection to process. If you omit the cond field, db.collection.group() processes all the documents in the collection for the group operation. Required document
finalize A function that runs each item in the result set before db.collection.group() returns the final value. This function can either modify the result document or replace the result document as a whole. Optional function

Assume that the sample collection is empdetails:


{
        "_id" : ObjectId("56750affdaac17575df77f3e"),
        "emp_code" : "E005",
        "emp_name" : "Alan Hogg",
        "date_of_join" : "15/09/2013",
        "salary" : 19000,
        "gross" : {
                "basic" : 12000,
                "da" : 5000,
                "hra" : 2000
        },
        "deduction" : {
                "pf" : 2000,
                "pt" : 300,
                "it" : 200
        }
}
{
        "_id" : ObjectId("567532f0f61afaaed2aae48c"),
        "emp_code" : "E006",
        "emp_name" : "Karlos Mint",
        "date_of_join" : "23/05/2010",
        "salary" : 17000,
        "gross" : {
                "basic" : 11000,
                "da" : 4500,
                "hra" : 1500
        },
        "deduction" : {
                "pf" : 3000,
                "pt" : 300,
                "it" : 400
        }
}
{
        "_id" : ObjectId("567532fbf61afaaed2aae48d"),
        "emp_code" : "E007",
        "emp_name" : "Burg Hence",
        "date_of_join" : "27/08/2011",
        "salary" : 20000,
        "gross" : {
                "basic" : 14000,
                "da" : 5000,
                "hra" : 1000
        },
        "deduction" : {
                "pf" : 2500,
                "pt" : 300,
                "it" : 200
        }
}
{
        "_id" : ObjectId("56753307f61afaaed2aae48e"),
        "emp_code" : "E004",
        "emp_name" : "Kim Nail",
        "date_of_join" : "16/10/2010",
        "salary" : 17000,
        "gross" : {
                "basic" : 14000,
                "da" : 3000,
                "hra" : 0
        },
        "deduction" : {
                "pf" : 2000,
                "pt" : 300,
                "it" : 200
        }
}

Example: Group by Two Fields

The following example groups by the date_of_join and gross.basic fields those documents that have date_of_join greater than 01/01/2009.


db.empdetails.group(
   {
     key: { "date_of_join": 1, "gross.basic": 1 },
     cond: { "date_of_join": { $gt: "01/01/2009" } },
     reduce: function ( curr, result ) { },
     initial: { }
   }
);

Output

[
        {
                "date_of_join" : "15/09/2013",
                "gross.basic" : 12000
        },
        {
                "date_of_join" : "23/05/2010",
                "gross.basic" : 11000
        },
        {
                "date_of_join" : "27/08/2011",
                "gross.basic" : 14000
        },
        {
                "date_of_join" : "16/10/2010",
                "gross.basic" : 14000
        }
]

Example: Group by Two Fields

The following example groups by the date_of_join and gross.basic fields, those documents that have date_of_join greater than 01/01/2009 and calculates the sum of the basic field for each grouping:

db.empdetails.group(
   {
     key: { "date_of_join": 1, "gross.basic": 1 },
     cond: { "date_of_join": { $gt: "01/01/2009" } },
     reduce: function ( curr, result ) {
                 result.total += curr.gross.basic;
             },
     initial: { total : 0 }
   }
);

Output:

[
        {
                "date_of_join" : "15/09/2013",
                "gross.basic" : 12000,
                "total" : 12000
        },
        {
                "date_of_join" : "23/05/2010",
                "gross.basic" : 11000,
                "total" : 11000
        },
        {
                "date_of_join" : "27/08/2011",
                "gross.basic" : 14000,
                "total" : 14000
        },
        {
                "date_of_join" : "16/10/2010",
                "gross.basic" : 14000,
                "total" : 14000
        }
]

Retrieve the restaurants data from here

Previous: db.collection. getShardVersion() method
Next: db.collection.insert() method



Follow us on Facebook and Twitter for latest update.