तो विचार है:
- दस्तावेज़ों को
deliveryDay
के अनुसार समूहित करें औरplate.name
plate.quantity
. का योग प्राप्त करने के लिए । - उपरोक्त परिणाम को
name
द्वारा फिर से समूहित करें[{ k: "", v: "" }]
. की एक सरणी उत्पन्न करने के लिए प्रारूप। - संयोजन
{ k: "plate", v: { name: "$_id" } }
उपरोक्त सरणी में। - अब
array
को कन्वर्ट करें $arrayToObject का उपयोग करके ऑब्जेक्ट में ।
मोंगो खेल के मैदान में समाधान . इसे आजमाएं:
db.testCollection.aggregate([
{
$group: {
_id: {
dDate: "$deliveryDay",
name: "$plate.name"
},
sumOfQty: { $sum: "$plate.quantity" }
}
},
{
$group: {
_id: "$_id.name",
array: {
$push: {
k: "$_id.dDate",
v: "$sumOfQty"
}
}
}
},
{
$addFields: {
array: {
$concatArrays: ["$array", [{ k: "plate", v: { name: "$_id" } }]]
}
}
},
{
$replaceRoot: {
newRoot: { $arrayToObject: "$array" }
}
}
]);
आउटपुट
/* 1 */
{
"2021-01-16" : 2,
"plate" : {
"name" : "pizza"
}
},
/* 2 */
{
"2021-01-14" : 1,
"2021-01-16" : 3,
"plate" : {
"name" : "pasta"
}
}