Lors de l'exécution de cette requête:
{ n: 1, nModified: 1, ok: 1 }
La réponse que j'obtiens est la suivante:
const project = await models.Projects .updateOne( { _id: projectId }, { $addToSet: { membersIds: { $each: membersIds }, }, }, );
Est-il possible d'obtenir un objet mis à jour au lieu de ces données de mangouste?
3 Réponses :
De la documentation : [callback] «Function» params are (error, writeOpResult)
ce qui signifie qu'il n'y a aucun moyen de retourner un document avec la méthode updateOne
.
Au lieu de updateOne
il est cependant possible d'utiliser findByIdAndUpdate en fournissant l'option lean: true
Si vous n'utilisez pas le document après l'opération de mise à jour, vous devez utiliser updateOne , c'est plus rapide. Pourtant; si vous avez besoin d'un document mis à jour, vous devez utiliser findByIdAndUpdate ou findOneAndUpdate . Vous pouvez filtrer uniquement avec _id avec findByIdAndUpdate, mais vous pouvez utiliser tous les filtres de champs existants avec findOneAndUpdate .
ATTENTION !
J'ai vu les réponses, elles vont bien, MAIS , faites attention à ajouter la nouvelle option et à la définir comme vraie dans la requête pour obtenir le nouveau document mis à jour, sinon il renverra le document avant la mise à jour:
models.Projects.findByIdAndUpdate( { "_id": projectId }, { $addToSet:{ membersIds: { $each: membersIds }}}) .exec() .then((response) => { console.log('document before updating =>', response); }); models.Projects.findByIdAndUpdate( { "_id": projectId }, { $addToSet:{ membersIds: { $each: membersIds }}}, {new: true}) .exec() .then((response) => { console.log('document after updating =>', response); });