"input":{
"_id":"1
access_key":12345,
"name":"anu"
}{
"_id":2,
"access_key":12345,
"name":"babu"
}{
"_id":3,
"access_key":12345,
"name":"chinu"
}{
"_id":4,
"access_key":12345,
"name":"chinu"
}
i want to display the result like this with acces_key and count of name
{
"access_key":12345,
"anu":1,
"babu":1,
"chinu":2
}
you can use the aggregation pipeline for this
db.test.aggregate([{"$group" : {_id:{"access_key":"$access_key","name":"$name"}, sum:{$sum:1}}},{$sort:{"sum":1}}])
{ "_id" : { "access_key" : 12345, "name" : "anu" }, "sum" : 1 }
{ "_id" : { "access_key" : 12345, "name" : "babu" }, "sum" : 1 }
{ "_id" : { "access_key" : 12345, "name" : "chinu" }, "sum" : 2 }
if you want to filter by access_key
db.test.aggregate([{"$match":{"access_key":12345}},{"$group" : {_id:{"access_key":"$access_key","name":"$name"}, sum:{$sum:1}}},{$sort:{"sum":1}}])
{ "_id" : { "access_key" : 12345, "name" : "anu" }, "sum" : 1 }
{ "_id" : { "access_key" : 12345, "name" : "babu" }, "sum" : 1 }
{ "_id" : { "access_key" : 12345, "name" : "chinu" }, "sum" : 2 }
2 Likes
if the result should be in 1 document, maybe something like
db.test.aggregate([{"$group" : {_id:{"access_key":"$access_key","name":"$name"},"name":{"$push": "$name"}}},{"$group":{"_id": "$_id.access_key","name":{"$push":{"name":"$name","count":{$size:"$name"}}}}}])
{ "_id" : 12345, "name" : [ { "name" : [ "anu" ], "count" : 1 }, { "name" : [ "chinu", "chinu" ], "count" : 2 }, { "name" : [ "babu" ], "count" : 1 } ] }
2 Likes
but there is n no of document how i wil count randomly without mention name values