sql >> Base de Datos >  >> NoSQL >> MongoDB

Recuento de devolución agregado de MongoDB de 0 si no hay resultados

Si entiendo correctamente lo que quieres, puedes intentar esto:

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

Actualización:
Desea obtener de la salida más documentos que estaban en la entrada, solo es posible con unwind operador que trabaja con matrices, pero no tiene matrices, por lo que sé que es imposible obtener más documentos en su caso. Por lo tanto, debe agregar algo de lógica después del resultado de la consulta para crear nuevos datos para las fechas existentes con un recuento de 0 para otro tipo de buildResult...