Вам нужно заставить expField
интерпретироваться как значение, а не как имя. Не уверен, возможно ли это в синтаксисе объектного литерала, но вы всегда можете сделать что-то вроде этого:
query = {
$push: {
evtsGame: newEvent
},
$set: {
updatedAt: moment().toISOString()
},
$inc: {
scoreField: goalValue.score
}
};
query['$set'][expField] = goalValue.exp;