Bạn đang bao gồm level trong update tham số tiêu chí truy vấn, vì vậy nếu điều đó cũng không khớp với bản ghi hiện có, nó sẽ thử và tạo một tài liệu mới sẽ làm hỏng chỉ mục duy nhất chỉ kéo dài skill và resource .
Thử thay đổi update của bạn về điều này:
ResourceSkillLevel.update({
resource: self._id,
skill: skill._id
}, {$set: {level: level}}, {upsert: true}, cb);