Database
[{"location_id":1,"probes":[{"probe_id":2,"readings":[{"value":42,"when":5},{"value":37,"when":10},{"value":43,"when":15},{"value":41,"when":20}]}]}]
Query
db.collection.update({"location_id":1},[{"$set":{"prob-id":{"$cond":[{"$eq":["$probes",[]]},4,2]}}},{"$set":{"probes":{"$cond":[{"$eq":["$probes",[]]},[{"probe_id":"$prob-id","readings":[]}],"$probes"]}}},{"$set":{"probes":{"$map":{"input":"$probes","as":"m1","in":{"$cond":[{"$ne":["$$m1.probe_id","$prob-id"]},"$$m1",{"$mergeObjects":["$$m1",{"readings":{"$let":{"vars":{"size_position":{"$reduce":{"input":"$$m1.readings","initialValue":[0,null,null],"in":{"$let":{"vars":{"index_pos":"$$value","m2":"$$this"},"in":{"$let":{"vars":{"index":{"$arrayElemAt":["$$index_pos",0]},"pos":{"$arrayElemAt":["$$index_pos",1]}},"in":{"$cond":[{"$and":[{"$eq":["$$pos",null]},{"$gt":["$$m2.when",11]}]},[{"$add":["$$index",1]},"$$index"],[{"$add":["$$index",1]},"$$pos"]]}}}}}}}},"in":{"$let":{"vars":{"asize":{"$arrayElemAt":["$$size_position",0]},"position":{"$arrayElemAt":["$$size_position",1]}},"in":{"$switch":{"branches":[{"case":{"$eq":["$$asize",0]},"then":[{"value":43,"when":11}]},{"case":{"$eq":["$$position",null]},"then":{"$let":{"vars":{"prv_member":{"$arrayElemAt":["$$m1.readings",{"$subtract":["$$asize",1]}]}},"in":{"$cond":[{"$eq":["$$prv_member.value",43]},"$$m1.readings",{"$concatArrays":["$$m1.readings",[{"value":43,"when":11}]]}]}}}},{"case":{"$eq":["$$position",0]},"then":{"$let":{"vars":{"next_member":{"$arrayElemAt":["$$m1.readings",0]}},"in":{"$cond":[{"$eq":["$$next_member.value",43]},{"$cond":[{"$lt":[11,"$$next_member.when"]},{"$concatArrays":[[{"value":43,"when":11}],{"$slice":["$$m1.readings",1,"$$asize"]}]},"$$m1.readings"]},{"$concatArrays":[[{"value":43,"when":11}],"$$m1.readings"]}]}}}}],"default":{"$let":{"vars":{"next_member":{"$arrayElemAt":["$$m1.readings","$$position"]},"prv_member":{"$arrayElemAt":["$$m1.readings",{"$subtract":["$$position",1]}]}},"in":{"$switch":{"branches":[{"case":{"$and":[{"$ne":["$$next_member.value",43]},{"$ne":["$$prv_member.value",43]}]},"then":{"$concatArrays":[{"$slice":["$$m1.readings",0,"$$position"]},[{"value":43,"when":11}],{"$slice":["$$m1.readings","$$position",{"$add":["$$asize",1]}]}]}},{"case":{"$eq":["$$prv_member.value",43]},"then":"$$m1.readings"}],"default":{"$concatArrays":[{"$slice":["$$m1.readings",0,"$$position"]},[{"value":43,"when":11}],{"$slice":["$$m1.readings",{"$add":["$$position",1]},{"$add":["$$asize",1]}]}]}}}}}}}}}}}}]}]}}}}},{"$unset":["prob-id"]}])