Skip to content Skip to sidebar Skip to footer

Find Distinct Values Group By Another Field Mongodb

I have collection with documents like this : { '_id' : ObjectId('5c0685fd6afbd73b80f45338'), 'page_id' : '1234', 'category_list' : [ 'football', 'spo

Solution 1:

you need to write an aggregate pipeline

  • $match - filter the documents by criteria
  • $group - group the documents by key field
  • $addToSet - aggregate the unique elements
  • $project - project in the required format
  • $reduce - reduce the array of array to array by $concatArrays

aggregate query

db.tt.aggregate([
    {$match : {"time_broadcast" : "09:13"}}, 
    {$group : {"_id" : "$page_id", "category_list" : {$addToSet : "$category_list"}}}, 
    {$project : {"_id" : 0, "page_id" : "$_id", "category_list" : {$reduce : {input : "$category_list", initialValue : [], in: { $concatArrays : ["$$value", "$$this"] }}}}}
]).pretty()

result

{ "page_id" : "123456", "category_list" : [ "news", "updates" ] }
{
        "page_id" : "1234",
        "category_list" : [
                "sport",
                "handball",
                "football",
                "sport"
        ]
}

you can add $sort by page_id pipeline if required


Post a Comment for "Find Distinct Values Group By Another Field Mongodb"