rahul  Kushwaha
rahul Kushwaha

Reputation: 2809

how to output with group by specific fields in pymongo?

there is a collection in MongoDB,

Ex:-

{ field1: a, field2: 1, field3: val_1, field4: val_11}
{ field1: a, field2: 2, field3: val_2, field4: val_22}
{ field1: a, field2: 5, field3: val_3, field4: val_33}
{ field1: a, field2: 1, field3: val_4, field4: val_44}
{ field1: a, field2: 3, field3: val_5, field4: val_55}
{ field1: a, field2: 3, field3: val_6, field4: val_66}
{ field1: a, field2: 5, field3: val_7, field4: val_77}
{ field1: a, field2: 2, field3: val_8, field4: val_88}
{ field1: a, field2: 1, field3: val_9, field4: val_99}
{ field1: a, field2: 2, field3: val_10, field4: val_1010}
{ field1: a, field2: 3, field3: val_11, field4: val_1111}
{ field1: b, field2: 3, field3: val_12, field4: val_1212}
{ field1: b, field2: 3, field3: val_13, field4: val_1313}
{ field1: b, field2: 3, field3: val_14, field4: val_1414}
{ field1: b, field2: 3, field3: val_15, field4: val_1515}

I want to query the collection and output of the document group by the field:-

Ex:- get the document where the field1 is a group by field2 values

{ field1: a, field2: 1, field3: val_1, field4: val_11}
{ field1: a, field2: 1, field3: val_4, field4: val_44}
{ field1: a, field2: 1, field3: val_9, field4: val_99}

{ field1: a, field2: 2, field3: val_2, field4: val_22}
{ field1: a, field2: 2, field3: val_8, field4: val_88}
{ field1: a, field2: 2, field3: val_10, field4: val_1010}

{ field1: a, field2: 5, field3: val_3, field4: val_33}
{ field1: a, field2: 5, field3: val_7, field4: val_77} 

{ field1: a, field2: 3, field3: val_5, field4: val_55}
{ field1: a, field2: 3, field3: val_6, field4: val_66} 
{ field1: a, field2: 3, field3: val_11, field4: val_1111}

I tried to use the $group in aggregate but unable to achieve the expected output

how to achieve the expected output.

Upvotes: 0

Views: 81

Answers (1)

Ashh
Ashh

Reputation: 46441

$match will filter out the documents where field1 is not equal to a.

$group will group the data followed by the expression in _id and $push the $$ROOT document in data field.

db.collection.aggregate([
  { "$match": { "field1": "a" }},
  { "$group": {
    "_id": "$field2",
    "data": {
      "$push": "$$ROOT"
    }
  }}
])

Upvotes: 1

Related Questions