sql >> Database >  >> NoSQL >> MongoDB

MongoDB geaggregeerde retourtelling van 0 als er geen resultaten zijn

Als ik goed begrijp wat je wilt, kun je dit proberen:

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

Bijwerken:
U wilt uit de uitvoer meer documenten halen die in de invoer zijn geweest, dit is alleen mogelijk met unwind operator die met arrays werkt, maar je hebt geen arrays, dus zoals ik weet is het onmogelijk om meer documenten in jouw geval te krijgen. U moet dus wat logica toevoegen na het queryresultaat om nieuwe gegevens te maken voor bestaande datums met een telling van 0 voor een ander type buildResult...




  1. Verwissel de waarden in een MongoDB-array

  2. Hoe kan ik MongoDB-opdrachten uitvoeren door de speciale $ cmd-verzameling op te vragen?

  3. mongoDB aggregatie opzoeken op geneste array van objecten

  4. Wanneer Redis gebruiken in plaats van MySQL voor PHP-applicaties?