Hey after i did an aggregation by group aggregation i found in the last stage the data below i want to replace array by object how could I do it (by adding another stage in the pipeline) Thanks
data in the final stage :
[
{
"_id":332,
"vendors":[
{
"count":6,
"products":[
{
"count":6
}
]
}
]
},
{
"_id":464,
"vendors":[
{
"count":10,
"products":[
{
"count":10
}
]
}
]
},
{
"_id":538,
"vendors":[
{
"count":9,
"products":[
{
"count":9
}
]
}
]
},
{
"_id":437,
"vendors":[
{
"count":13,
"products":[
{
"count":13
}
]
}
]
},
{
"_id":352,
"vendors":[
{
"count":8,
"products":[
{
"count":8
}
]
}
]
},
{
"_id":498,
"vendors":[
{
"count":9,
"products":[
{
"count":9
}
]
}
]
},
{
"_id":329,
"vendors":[
{
"count":8,
"products":[
{
"count":8
}
]
}
]
},
{
"_id":467,
"vendors":[
{
"count":9,
"products":[
{
"count":9
}
]
}
]
},
{
"_id":430,
"vendors":[
{
"count":13,
"products":[
{
"count":13
}
]
}
]
},
{
"_id":291,
"vendors":[
{
"count":5,
"products":[
{
"count":5
}
]
}
]
},
{
"_id":192,
"vendors":[
{
"count":2,
"products":[
{
"count":2
}
]
}
]
},
{
"_id":441,
"vendors":[
{
"count":13,
"products":[
{
"count":13
}
]
}
]
},
{
"_id":466,
"vendors":[
{
"count":10,
"products":[
{
"count":10
}
]
}
]
},
{
"_id":445,
"vendors":[
{
"count":13,
"products":[
{
"count":13
}
]
}
]
},
{
"_id":465,
"vendors":[
{
"count":9,
"products":[
{
"count":9
}
]
}
]
}
]
data i want :
{
"192":{
"count":2,
"products":{
"count":2
}
},
"329":{
"count":8,
"products":{
"count":8
}
},
"498":{
"count":9,
"products":{
"count":9
}
},
"291":{
"count":5,
"products":{
"count":5
}
},
"332":{
"count":6,
"products":{
"count":6
}
},
"437":{
"count":13,
"products":{
"count":13
}
},
"352":{
"count":8,
"products":{
"count":8
}
},
"445":{
"count":13,
"products":{
"count":13
}
},
"538":{
"count":9,
"products":{
"count":9
}
},
"466":{
"count":10,
"products":{
"count":10
}
},
"464":{
"count":10,
"products":{
"count":10
}
},
"465":{
"count":9,
"products":{
"count":9
}
},
"430":{
"count":13,
"products":{
"count":13
}
},
"467":{
"count":9,
"products":{
"count":9
}
},
"441":{
"count":13,
"products":{
"count":13
}
}
}
PS: i did a group in the pipeline to group by id then vendor then product using push so i got the array
using the following code
result=collection.aggregate([
{ "$project": { "object.definition.metadata.affected.@family":1,"object.definition.metadata.affected.product":1,"job_id":1,"_id":0} }, #"object.definition.metadata.affected.product":1,
{ "$group": {
"_id": {
"job_id":"$job_id",
"family": "$object.definition.metadata.affected.@family",
"product": "$object.definition.metadata.affected.product"
},
"count": {
"$sum": 1
}
}
},
{
"$group": {
"_id": {
"job_id": "$_id.job_id",
"vendor": "$_id.family",
# "product":"$_id.product"
},
"count": {
"$sum": "$count"
},
"products": {
"$push": {
"product": "$_id.product",
"count": "$count",
"products": "$products"
}
}
}
},
{
"$group": {
"_id": "$_id.job_id",
"vendors": {
"$push": {
"vendor": "$_id.vendor",
"count": "$count",
"products": "$products"
}
}
}
},
so i want to save values not in an array (push) but in a nested object thanks