आप वहां सही रास्ते पर हैं।
संपूर्ण ऑब्जेक्ट को किसी सरणी में कनवर्ट करते समय, श्रेणी फ़ील्ड भी सहेजें।
आवश्यक चरण:
- $प्रोजेक्ट श्रेणी को सहेजने और ऑब्जेक्ट को एक सरणी में बदलने के लिए
- $प्रत्येक फ़ील्ड पर अलग से विचार करने के लिए सरणी को खोलना
- $मिलान
_id
को हटाने के लिए ,Category
और कोई अन्य फ़ील्ड जिसे आप सरणी से समूहीकृत नहीं करना चाहते हैं - $समूह द्वारा
Category
औरk
प्रत्येक कुंजी के मानों को एक सरणी में धकेलने के लिए - $समूह द्वारा
Category
कुंजियों और सरणियों को एक साथ इकट्ठा करने के लिए - $प्रोजेक्ट एकत्रित मानों के साथ सरणी को किसी ऑब्जेक्ट में बदलने के लिए
- $addFields श्रेणी को नई वस्तु में इंजेक्ट करने के लिए
- $replaceRoot नई वस्तु को बढ़ावा देने के लिए
db.collection.aggregate([
{$project: {
Category: 1,
fields: {$objectToArray: "$$ROOT"}
}},
{$unwind: "$fields"},
{$match: {"fields.k": {$not: {$in: ["_id","Category"]}} }},
{$group: {
_id: {
Category: "$Category",
key: "$fields.k"
},
value: {$push: "$fields.v"}
}},
{$group: {
_id: "$_id.Category",
fields: {
$push: {
"k": "$_id.key",
"v": "$value"
}
}
}},
{$project: {
fields: {$arrayToObject: "$fields"}
}},
{$addFields: {
"fields.Category": "$_id"
}},
{$replaceRoot: { newRoot: "$fields"}}
])