Pillola: Come utilizzare l'operatore $push in un'aggregazione in MongoDB
Problema
Data una collezione di temperature raccolte da un sensore, trovare per ogni sensore l’insieme di date in cui si e' superata una certa soglia, ordinata per data decrescente.
Soluzione
Utilizzare l’operatore $push
nello step $group
. L’operatore accumula
i valori relativi a un campo dei documenti in raggruppamento all’interno di un array
// struttura dati
{
"_id" : ObjectId("62ed153e70c200f3cfe0d06b"),
"sensorId" : "sensor-1",
"date" : ISODate("2022-08-01T23:00:10.000Z"),
"degree" : 18.3
}
// query
db.getCollection('degrees').aggregate([
{ $match : { degree: {"$gt": 20 }}},
{ $sort : {"date": -1 }},
{ $group : {_id: "$sensorId", dates: {$push: "$date"}}}])
// esempio risultato
{
"_id" : "sensor-3",
"dates" : [
ISODate("2022-08-01T02:10:00.000Z")
]
}
{
"_id" : "sensor-1",
"dates" : [
ISODate("2022-08-01T23:10:10.000Z"),
ISODate("2022-08-01T05:00:00.000Z")
]
}