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!
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/
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