MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Conteggio restituito aggregato MongoDB pari a 0 se nessun risultato

Se ho capito bene cosa vuoi, potresti provare questo:

db.builds.aggregate([
    { $project: 
        { 
            time: 1,
            projectedData: { $ifNull: ['$data.buildResult', 'none'] } 
        } 
    },

    { $group: { 
        _id: { 
            month: { $month: "$time" },
            day: { $dayOfMonth: "$time" },
            year: { $year: "$time" }, 
            buildResult: "$projectedData"
        },
        count: { $sum: { $cond: [ { $eq: [ "$projectedData", "none" ] }, 0, 1 ] } }
    } },

    { $sort: { "_id.year": 1, "_id.month": 1, "_id.day": 1 } }
])

Aggiornamento:
Vuoi ottenere dall'output più documenti che erano in input, è possibile solo con unwind operatore che funziona con gli array, ma non hai array, quindi come so che è impossibile ottenere più documenti nel tuo caso. Quindi dovresti aggiungere un po' di logica dopo il risultato della query per creare nuovi dati per le date esistenti con 0 conteggio per un altro tipo di buildResult...