web-dev-qa-db-fra.com

Mettre à jour beaucoup de mangoustes

J'ai un cas très simple. Je veux mettre à jour ma collection tous les minuit. J'utilise node-schedule:

schedule.scheduleJob('0 0 * * *', () => {
   Users.updateMany();
});

Tout ce que je veux faire, c'est faire une boucle sur chaque document de ma collection (Users) puis si User.created est false, je veux le transformer en true.

En javascript ce serait:

for (let user in Users) {
   if (user.created === false) {
      user.created = true;
   }
} 

Comment le faire en mangouste? Merci!

Edit: L'histoire est très simple, je veux juste itérer sur chaque élément de ma base de données en utilisant mangouste et si l'élément itéré a un champ "créé" === false, changez-le en true.

18
Patrickkx

Vous avez d'abord besoin d'une requête pour trouver les documents que vous souhaitez mettre à jour. C'est tout simplement:

{"created": false}

Ensuite, vous avez besoin d'une requête de mise à jour pour indiquer à mongo comment mettre à jour ces documents:

{"$set":{"created": true}}

Vous devez utiliser le $set opérateur pour spécifier les champs à modifier, sinon il écrasera tout le document. Enfin, vous pouvez combiner ces composants en un seul appel mongo avec un paramètre supplémentaire pour indiquer à mongo que nous voulons modifier plusieurs documents:

User.update({"created": false}, {"$set":{"created": true}}, {"multi": true}, (err, writeResult) => {});

Mongoose essaie de répliquer étroitement l'API mongo afin que toutes ces informations se trouvent uniquement dans la documentation de MongoDB: https://docs.mongodb.com/manual/reference/method/db.collection.update/

19
jakedipity

Vous pouvez utiliser les méthodes updateMany() de mongodb pour mettre à jour plusieurs documents

La requête simple est comme ça

db.collection.updateMany(filter, update, options)

Pour plus de doc uppdateMany lire ici

Selon votre exigence le code de mise à jour sera comme ceci:

User.updateMany({"created": false}, {"$set":{"created": true}});

ici, vous devez utiliser $ set parce que vous voulez simplement changer la création de true en false. Pour réf. Si vous souhaitez modifier un document entier, vous n'avez pas besoin d'utiliser $ set

34
Harsh Patel