MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB nombre de retours agrégés de 0 si aucun résultat

Si j'ai bien compris ce que vous voulez, vous pouvez essayer ceci :

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 } }
])

Mise à jour :
Vous souhaitez obtenir de la sortie plus de documents qui étaient en entrée, cela n'est possible qu'avec unwind opérateur qui fonctionne avec des tableaux, mais vous n'avez pas de tableaux, donc je sais qu'il est impossible d'obtenir plus de documents dans votre cas. Vous devez donc ajouter une logique après le résultat de la requête pour créer de nouvelles données pour les dates existantes avec un nombre de 0 pour un autre type de buildResult...