I'm moving my first steps into MongoDB but I'm having difficulties into writing complex queries.
I have several items like this in my collection:
{
"_id" : "sku001",
"deposits" : [
{
"deposit_id" : "deposit01",
"total" : "3",
"sizes" : [
{
"size" : "36",
"stock" : "2"
},
{
"size" : "38",
"stock" : "0"
},
{
"size" : "40",
"stock" : "0"
},
{
"size" : "42",
"stock" : "0"
},
{
"size" : "44",
"stock" : "0"
},
{
"size" : "46",
"stock" : "1"
},
{
"size" : "48",
"stock" : "0"
},
{
"size" : "50",
"stock" : "0"
},
{
"size" : "52",
"stock" : "0"
}
]
},
{
"deposit_id" : "deposit02",
"total" : "5",
"sizes" : [
{
"size" : "36",
"stock" : "1"
},
{
"size" : "38",
"stock" : "1"
},
{
"size" : "40",
"stock" : "0"
},
{
"size" : "42",
"stock" : "1"
},
{
"size" : "44",
"stock" : "0"
},
{
"size" : "46",
"stock" : "1"
},
{
"size" : "48",
"stock" : "1"
},
{
"size" : "50",
"stock" : "0"
},
{
"size" : "52",
"stock" : "0"
}
]
},
{
"deposit_id" : "deposit03",
"total" : "2",
"sizes" : [
{
"size" : "36",
"stock" : "1"
},
{
"size" : "38",
"stock" : "0"
},
{
"size" : "40",
"stock" : "0"
},
{
"size" : "42",
"stock" : "1"
},
{
"size" : "44",
"stock" : "0"
},
{
"size" : "46",
"stock" : "0"
},
{
"size" : "48",
"stock" : "0"
},
{
"size" : "50",
"stock" : "0"
},
{
"size" : "52",
"stock" : "0"
}
]
},
{
"deposit_id" : "deposit04",
"total" : "0",
"sizes" : [
{
"size" : "36",
"stock" : "0"
},
{
"size" : "38",
"stock" : "0"
},
{
"size" : "40",
"stock" : "0"
},
{
"size" : "42",
"stock" : "0"
},
{
"size" : "44",
"stock" : "0"
},
{
"size" : "46",
"stock" : "0"
},
{
"size" : "48",
"stock" : "0"
},
{
"size" : "50",
"stock" : "0"
},
{
"size" : "52",
"stock" : "0"
}
]
}
]
}
and would like to write a query which will output this resulting document:
{
"_id" : "sku001",
"total": 10,
"sizes" [
{
"size" : "36",
"stock" : "4"
},
{
"size" : "38",
"stock" : "1"
},
{
"size" : "40",
"stock" : "0"
},
{
"size" : "42",
"stock" : "2"
},
{
"size" : "44",
"stock" : "0"
},
{
"size" : "46",
"stock" : "2"
},
{
"size" : "48",
"stock" : "1"
},
{
"size" : "50",
"stock" : "0"
},
{
"size" : "52",
"stock" : "0"
}
]
}
so that:
- total is the sum the "total" field in each deposit
- sizes is the resulting array given from the sum of the same size in each deposit
I know that I need to use aggregate() with $unwind, $group and maybe $project, but I don't understand how and in which order.
Can you help me? I'm using MongoDB version 3.4.3