Stai includendo level
nell'update
parametro dei criteri di query, quindi se anche questo non corrisponde al record esistente, proverà a creare un nuovo documento che non supererà l'indice univoco che copre solo skill
e resource
.
Prova a cambiare il tuo update
a questo:
ResourceSkillLevel.update({
resource: self._id,
skill: skill._id
}, {$set: {level: level}}, {upsert: true}, cb);