web-dev-qa-db-fra.com

Enregistrer ou mettre à jour Mongoose

Existe-t-il un moyen intéressant d’enregistrer ou de mettre à jour un document en mangouste? Quelque chose comme ce que je cherche après

 let campaign = new Campaign({
        title: req.body.title,
        market: req.body.market,
        logo: req.body.logo,
        additional_question_information: question,
        status: status
    });

 campaign.saveOrUpdate().then(function() { ... }

Merci pour l'aide tous

5
Ollie

Je pense que ce que vous recherchez s'appelle un "upsert".

Vous pouvez le faire en utilisant findOneAndUpdate et en passant l'option {upsert: true}, comme dans l'exemple ci-dessous: 

let campaign = new Campaign({
        title: req.body.title,
        market: req.body.market,
        logo: req.body.logo,
        additional_question_information: question,
        status: status
    });

Campaign.findOneAndUpdate({
    _id: mongoose.Types.ObjectId('CAMPAIGN ID TO SEARCH FOR')
}, campaign, { upsert: true }, function(err, res) {
    // Deal with the response data/error
});

Le premier paramètre de findOneAndUpdate est la requête utilisée pour savoir si vous enregistrez un nouveau document ou mettez à jour un document existant. Si vous souhaitez renvoyer le document modifié dans les données de réponse, vous pouvez également ajouter l'option { new: true }.

Documentation ici pour findOneAndUpdate: http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate

12
CD-jS

Vous pouvez utiliser la fonction findAndModify de MongoDB. En mangouste, cela est supporté nativement en appelant findOneAndUpdate (). Voici la documentation pour cela. http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate Notez que le troisième argument attend qu'un objet soit passé avec des options. Vous voulez utiliser { upsert : true } pour créer un nouveau document s'il n'en existe pas.

0
itsundefined