My aggregation pipeline is a document with a single field result
that contains an array, like this:
[
{
"result": [
{
"meteoEventType": "RAIN",
"meteoEventLabel": "PRECIPITAZIONE",
"meteoEventLevel": "LOW",
"meteoEventLevelLabel": "Forte pioviggine"
},
{
"meteoEventType": "HAIL",
"meteoEventLabel": "GRANDINE",
"meteoEventLevel": "MEDIUM",
"meteoEventLevelLabel": "Probabilità moderata"
},
{
"meteoEventType": "INUNDATION",
"meteoEventLabel": "ALLAGAMENTI",
"meteoEventLevel": "LOW",
"meteoEventLevelLabel": "Probabilità molto bassa"
},
{
"meteoEventType": "WIND",
"meteoEventLabel": "VENTO",
"meteoEventLevel": "LOW",
"meteoEventLevelLabel": "Calma"
}
]
}
]
What I need to achieve is something like this, without the result
field:
[
{
"meteoEventType": "RAIN",
"meteoEventLabel": "PRECIPITAZIONE",
"meteoEventLevel": "LOW",
"meteoEventLevelLabel": "Forte pioviggine"
},
{
"meteoEventType": "HAIL",
"meteoEventLabel": "GRANDINE",
"meteoEventLevel": "MEDIUM",
"meteoEventLevelLabel": "Probabilità moderata"
},
{
"meteoEventType": "INUNDATION",
"meteoEventLabel": "ALLAGAMENTI",
"meteoEventLevel": "LOW",
"meteoEventLevelLabel": "Probabilità molto bassa"
},
{
"meteoEventType": "WIND",
"meteoEventLabel": "VENTO",
"meteoEventLevel": "LOW",
"meteoEventLevelLabel": "Calma"
}
]
Considering that I am using MongoDB 4, how can I get rid of the result
field?
The $replaceWith
stage can't work because result
is not a document.
You need the $unwind
stage to deconstruct the result
array before the $replaceWith
stage.
db.collection.aggregate([
{
$unwind: "$result"
},
{
$replaceWith: "$result"
}
])