Pillola: Come utilizzare l'operatore $push in un'aggregazione in MongoDB

Pubblicato il 06/08/2022

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")
    ]
}
  • I contenuti di questo articolo sono rilasciati con licenza CC-BY 4.0
  • Eventuali spezzoni di codice presentati seguono, dove non dichiarato, licenza MIT