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
bloodstockest un tableau et non un objet. Vous devez parcourir lebloodstocket ensuite enregistrer un par un.