$arrayElemAt
dic
. से पहला तत्व प्राप्त करने के लिए सरणी
$objectToArray
कन्वर्ट A
सरणी पर आपत्ति
$reduce
परिवर्तित सरणी के ऊपर तत्व के लूप को पुनरावृत्त करने के लिए और स्थिति की जांच करें यदि _id.A
डेटा के साथ मेल खाता है A
फिर विशिष्ट फ़ील्ड लौटाएं,
B
. के लिए भी यही प्रक्रिया करें और C
db.collection.aggregate([
{
$addFields: {
dic: { $arrayElemAt: ["$dic", 0] }
}
},
{
$project: {
_id: 1,
dic: {
A: {
$reduce: {
input: { $objectToArray: "$dic.data.A" },
initialValue: "Not Found",
in: {
$cond: [
{ $eq: ["$$this.k", "$_id.A"] },
"$$this.v.name",
"$$value"
]
}
}
},
B: {
$reduce: {
input: { $objectToArray: "$dic.data.B" },
initialValue: "Not Found",
in: {
$cond: [
{ $eq: ["$$this.k", "$_id.B"] },
"$$this.v.description",
"$$value"
]
}
}
},
C: {
$reduce: {
input: { $objectToArray: "$dic.data.C" },
initialValue: "Not Found",
in: {
$cond: [
{ $eq: ["$$this.k", "$_id.C"] },
"$$this.v.description",
"$$value"
]
}
}
}
}
}
}
])
खेल का मैदान