javascript - updateone - mongodb c# findoneandupdate
Mongoose findOneAndUpdate y upsert no devuelve errores ni documentos afectados (2)
A partir de Mongoose 4+, no olvide establecer new: true junto con upsert o obtendrá el documento antiguo como un valor de retorno, no el actualizado.
Esto es bastante complicado, especialmente cuando la solicitud crea un documento, como si no especificara nuevo: verdadero, recibe un documento nulo (no había ningún documento existente), pero no hubo ningún error.
var myObj = ...;
collection.findOneAndUpdate(
{uniqueAttr: myObj.uniqueAttr},
myObj,
{upsert: true, new: true},
function(...) {...}
Tengo un modelo muy minimalista:
var CompanySchema = new mongoose.Schema({
name: { type: String, required: true, unique: true },
});
var Company = mongoose.model(''Company'', CompanySchema)
Estoy intentando agregar un solo documento si no existe. Actualmente, no hay documentos mientras pruebo:
models.Company.findOneAndUpdate({
name: ''companyName''
}, {upsert: true}, function(err, numberAffected, raw){
console.log(err, numberAffected, raw)
})
Esto está usando las opciones de upsert
de los documentos de Mongoose
Sin embargo, err
es null
, numberAffected
es nulo. ¿Por qué no se actualiza mi documento?
en su código, está utilizando la versión de 3 parámetros del método findOneAndUpdate
, por lo que, según la documentación que publicó, los parámetros son: A.findOneAndUpdate(conditions, update, callback)
.
Debe usar la cuarta versión de los parámetros del método para especificar la opción upsert.
Me gustaría señalar que nunca usé el marco mangosta. Espero que esto ayude.
Edición: Sí, en su caso, las conditions
y la update
son las mismas. Si su objeto es más complejo que el que se muestra en el ejemplo, es posible que desee verificar el atributo _id o un atributo "único" (no garantizado por MongoDB) (mejor si tiene un índice). Por ejemplo:
var myObj = ...;
collection.findOneAndUpdate({uniqueAttr: myObj.uniqueAttr}, myObj, {upsert: true}, function(){
...
});