Database
[{"uID":"12345678","midNightTimeStamp":NumberInt(1645381800),"waterDispensed":NumberInt(53)},{"uID":"12345678","midNightTimeStamp":NumberInt(1645641000),"waterDispensed":NumberInt(30)},{"uID":"12345679","midNightTimeStamp":NumberInt(1645468200),"waterDispensed":NumberInt(30)}]
Query
db.collection.aggregate([{/** The uID we want*/"$match":{"uID":"12345678"}},{/** grab all the uID docs as "water"* keep uID*/"$group":{"_id":null,"water":{"$push":"$$CURRENT"},"uID":{"$first":"$uID"}}},{/** create outArray*/"$set":{"outArray":{/** by mapping time vals*/"$map":{"input":{"$range":[NumberInt(1645381800),NumberInt(1645900200),86400]},"in":{"$cond":[{/** already have doc?*/"$in":["$$this","$water.midNightTimeStamp"]},{/** yes! Get it!*/"$arrayElemAt":["$water",{"$indexOfArray":["$water.midNightTimeStamp","$$this"]}]},{/** no, create it*/"uID":"$uID","midNightTimeStamp":"$$this","waterDispensed":0}]}}}}},{/** only need outArray now*/"$project":{"_id":0,"outArray":1}},{/** create docs*/"$unwind":"$outArray"},{/** hoist them*/"$replaceWith":"$outArray"},{/** don't need _id*/"$unset":"_id"}])