Você está incluindo
level
na update
parâmetro de critérios de consulta, portanto, se isso também não corresponder ao registro existente, ele tentará criar um novo documento que falhará no índice exclusivo que abrange apenas skill
e resource
. Tente alterar sua
update
para isso:ResourceSkillLevel.update({
resource: self._id,
skill: skill._id
}, {$set: {level: level}}, {upsert: true}, cb);