node.js - how - Mangoose upsert duplicate key error
mongodb find match (1)
Estoy intentando hacer un upsert usando Mongoose, pero obtengo un error de clave duplicada para la misma clave que debería desencadenar el upsert.
Esquema:
"resource": {type: Schema.ObjectId, ref: "Resource"},
"skill": {type: Schema.ObjectId, ref: "Skill"},
"level": {type: Number, min: 1, max: 5}
.index({skill: 1, resource: 1}, {unique: true});
Luego hago la llamada:
//self is a Resource instance
ResourceSkillLevel.update({
resource: self._id,
skill: skill._id,
level: level
}, {$set: {level: level}}, {upsert: true}, cb);
Si el (resource, skill)
no existe, esta llamada funciona bien y crea correctamente la entrada ResourceSkillLevel
. Sin embargo, cuando lo vuelvo a llamar, obtengo duplicate key error index
. La clave duplicada enumerada es la tecla de recurso / habilidad de tupla. ¿Por qué no está remarcando cuando encuentra el duplicado?
Está incluyendo el level
en el parámetro de criterios de consulta de update
, por lo que si eso no coincide con el registro existente, intentará crear un nuevo documento que no pasará al índice único que solo abarca skill
y resource
.
Intenta cambiar tu update
a esto:
ResourceSkillLevel.update({
resource: self._id,
skill: skill._id
}, {$set: {level: level}}, {upsert: true}, cb);