MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB aggregierte Rückgabezahl von 0, wenn keine Ergebnisse vorliegen

Wenn ich richtig verstanden habe, was Sie wollen, könnten Sie Folgendes versuchen:

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

Aktualisierung:
Möchtest du aus dem Output mehr Dokumente bekommen als im Input, geht das nur mit unwind Operator, der mit Arrays arbeitet, aber Sie haben keine Arrays, daher ist es meines Wissens unmöglich, mehr Dokumente in Ihrem Fall zu erhalten. Sie sollten also nach dem Abfrageergebnis etwas Logik hinzufügen, um neue Daten für vorhandene Daten mit 0-Zählung für einen anderen Typ von buildResult zu erstellen...