Rashel
Rashel

Reputation: 95

How to get grouped data as well as all data using mongodb?

Using the following code, I do get totalAccount and totalBalance. But, no other field/data is showing up. How can I also get all data from my collection that matches my query (brcode)?

const test = await db.collection('alldeposit').aggregate([
        {
            $match: {
                brcode: brcode
               
            }
        },
        
        {
           $group: {
               _id: null,
               totalAccount: {
                   $sum: 1
               },
               totalBalance: {
                   $sum: "$acbal"
               }
           }
        }
        
    ]).toArray()

Upvotes: 1

Views: 23

Answers (1)

Murat Colyaran
Murat Colyaran

Reputation: 2189

You have to specify which fields you want to see in the $group stage

For example:

    await db.collection('alldeposit').aggregate([
       {
           $match: {
               brcode: brcode
           }
       },
      {
      $group: {
         _id : null,
         name : { $first: '$name' },
         age : { $first: '$age' },
         sex : { $first: '$sex' },
         province : { $first: '$province' },
         city : { $first: '$city' },
         area : { $first: '$area' },
         address : { $first: '$address' },
         totalAccount: {
             $sum: 1
         },
         totalBalance: {
            $sum: "$acbal"
         }
      }
    }]);

Edit:

Regarding our chat in the comments, unfortunately I don't know a way to do the operation you asked in a single aggregation.

But with two steps, you can do it:

First step:

db.collection.aggregate([
  {
      $match: {
         brcode: brcode
      }
  },
  {
    "$group": {
      "_id": null,
      totalAccount: {
        $sum: 1
      },
      totalBalance: {
        $sum: "$acbal"
      }
    }
  }
])

And second step:

db.collection.update(
  { brcode: brcode }
  ,{$set : {
     "totalAccount": totalAccount,
     "totalBalance": totalBalance
   }}
)

Upvotes: 1

Related Questions