2
votes

Rechercher et mettre à jour de nombreux documents répertoriés dans un tableau

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 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?

Exemples de documents:

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'); 
        }
    });  
});

Mon code:

_id:5c5ef16221a4961b68e64d98
serial_code:"one"
status:"available"

_id:5c5ef17541a4961b68e64d98
serial_code:"two"
status:"available"

Me donne une erreur:

TypeError: bloodstock.save n'est pas une fonction


2 commentaires

gérer l'erreur dans votre rappel


bloodstock est un tableau et non un objet. Vous devez parcourir le bloodstock et ensuite enregistrer un par un.


3 Réponses :


1
votes

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.


2 commentaires

me donne toujours TypeError: bloodstock.save n'est pas une fonction


@JeremyAdriandeVera a modifié ma réponse



3
votes

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)
  }
)


0 commentaires

0
votes

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 /


0 commentaires