Du inkluderar level i update query criteria parameter, så om den inte också matchar den befintliga posten kommer den att försöka skapa ett nytt dokument som kommer att misslyckas med det unika indexet som bara sträcker sig över skill och resource .
Prova att ändra din update till detta:
ResourceSkillLevel.update({
resource: self._id,
skill: skill._id
}, {$set: {level: level}}, {upsert: true}, cb);