Database
[{"userName":"Iron Man","balance":100.0,"bets":[{"teamId":{"$numberInt":"19"},"opponentTeamId":{"$numberInt":"21"},"eventId":"401438004","amount":{"$numberInt":"20"},"multiplier":3.85,"isPaidOut":true,"didWin":false},{"teamId":{"$numberInt":"21"},"opponentTeamId":{"$numberInt":"19"},"eventId":"401438004","amount":{"$numberInt":"70"},"multiplier":1.27,"isPaidOut":false},{"teamId":{"$numberInt":"25"},"opponentTeamId":{"$numberInt":"6"},"eventId":"401438006","amount":{"$numberInt":"200"},"multiplier":1.49,"isPaidOut":false}]}]
Query
db.collection.update({bets:{"$elemMatch":{eventId:"401438004",isPaidOut:false,teamId:21}}},[{"$set":{"balance":{$reduce:{input:"$bets",initialValue:"$balance",in:{$add:["$$value",{$cond:[{$and:[{$eq:["$$this.eventId","401438004"]},{$eq:["$$this.teamId",21]},{$eq:["$$this.isPaidOut",false]}]},{$ceil:{$multiply:["$$this.amount","$$this.multiplier"]}},0]}]}}},"bets":{$map:{input:"$bets",in:{$cond:[{$and:[{$eq:["$$this.eventId","401438004"]},{$eq:["$$this.teamId",21]},{$eq:["$$this.isPaidOut",false]}]},{"$mergeObjects":["$$this",{"didWin":true,"isPaidOut":true}]},{"$mergeObjects":["$$this"]}]}}}}}])