Database

[{"_id":ObjectId("6115150f01d7d0426bcd0390"),"conf":"conference123","uid":"2dd8b4e3-9dcd-4da6-bc36-aa0988dc9642","log":[{"dt":ISODate("2021-08-12T12:33:49.782Z"),"connection_quality":60,"video_bitrate":150},{"dt":ISODate("2021-08-12T12:34:19.781Z"),"video_bitrate":145/** connection_quality didn't change so it's not stored*/},{"dt":ISODate("2021-08-12T12:34:30.781Z"),"video_bitrate":130/** connection_quality didn't change so it's not stored*/},{"dt":ISODate("2021-08-12T12:34:49.787Z"),"connection_quality":100,"video_bitrate":150},{"dt":ISODate("2021-08-12T12:35:19.789Z"),"video_bitrate":160/** connection_quality didn't change so it's not stored*/}]}]

Query

db.collection.aggregate([{$match:{conf:"conference123",uid:"2dd8b4e3-9dcd-4da6-bc36-aa0988dc9642"}},{$addFields:{log:{$map:{input:"$log",as:"l",in:{$cond:[{$eq:[{$type:"$$l.connection_quality"},"missing"]},{dt:"$$l.dt",connection_quality:{$let:{vars:{log:{$last:{$filter:{input:"$log",cond:{$and:[{$lt:["$$this.dt","$$l.dt"]},{$ne:[{$type:"$$this.connection_quality"},"missing"]}]}}}}},in:"$$log.connection_quality"}}},"$$l"]}}}}},{$unwind:"$log"},{$project:{_id:0,"Date":"$log.dt","User ID":"$uid","Connection Quality":"$log.connection_quality"}}])

Result