J'essaie de mettre à jour ma base de données en trouvant tous les documents correspondants répertoriés dans un tableau, puis de mettre à jour les multiples documents répertoriés, j'ai pu mettre à jour un seul document en utilisant Exemples de documents: Mon code: Me donne une erreur: findOne () code > mais quand j'utilise
find ()
pour rechercher tous les documents qui correspondent dans le tableau .. il ne se met pas à jour. Une solution pour cela? Bloodstock.find({ serial_code : { $in : ['one','two','three'] } }, function(bloodstock) {
bloodstock.status = 'not available';
bloodstock.save(function(err) {
if (err) {
console.log(err);
} else {
console.log('success');
}
});
});
_id:5c5ef16221a4961b68e64d98
serial_code:"one"
status:"available"
_id:5c5ef17541a4961b68e64d98
serial_code:"two"
status:"available"
TypeError: bloodstock.save n'est pas une fonction
3 Réponses :
Les rappels de Mongoose prennent généralement deux arguments et le premier représente une erreur, regardez ici . Par conséquent, votre code pourrait ressembler à ce qui suit:
Bloodstock.find({ serial_code : { $in : ['one','two','three'] } }, function(error, bloodstockDocs) { if(error) return; for(let bloodstock of bloodstockDocs) { bloodstock.status = 'not available'; bloodstock.save(function(err) { if (err) { console.log(err); } else { console.log('success'); } }); } });
EDIT: find
renvoie une collection, vous devez donc utiliser la boucle for
pour les parcourir documents.
me donne toujours TypeError: bloodstock.save n'est pas une fonction
@JeremyAdriandeVera a modifié ma réponse
Utilisez la requête de mise à jour à la place
Bloodstock.update( { serial_code : { $in : ['one','two','three'] } }, { $set: { status: 'not available' }}, { multi: true }, function (err, result){ console.log(result) } )
Vous pouvez utiliser la méthode de mise à jour avec l'option multi: true pour mettre à jour plusieurs documents correspondant à votre requête.
Bloodstock.update( { serial_code : { $in : ['one','two','three'] } }, { $set: { status: 'not available' }}, { multi: true }, function (err, result){ console.log(result) } );
Vous pouvez consulter plus de détails sur les options ici: https://docs.mongodb.com/manual/reference/method/ db.collection.update /
gérer l'erreur dans votre rappel
bloodstock
est un tableau et non un objet. Vous devez parcourir lebloodstock
et ensuite enregistrer un par un.