Vous faites donc partie du chemin, mais bien sûr lorsque vous ne trouvez pas de doc
alors vous n'aurez pas de doc
avec lequel travailler dans le rappel. MongoDB a des moyens natifs de gérer ces types de mises à jour, mais bien sûr, vous devez tester la correspondance comme vous êtes.
Ce que nous pouvons faire ici, c'est simplement travailler dans le true
ou false
condition de l'endroit où le document existe.
Compte tenu de vote.value
être votre true
ou false
pour le "vote positif"
Lorsque vous trouvez qu'il existe un document correspondant, vous pouvez publier une mise à jour comme celle-ci :
Question.update(
{
_id: questionId,
"votes.createdBy" vote.createdBy,
"votes.up": {"$ne": vote.value }
},
{ $set: { "votes.$.up": vote.value } }
);
Donc, cela correspond et utilise un positionnel
$
opérateur pour s'assurer que le bon index de l'élément correspondant est mis à jour. Ce que j'ai ajouté ici garantit que vous ne touchez même pas le document où le vote.vaule
est déjà de la même valeur.
Et dans la condition fausse, vous voulez $push sur le tableau avec le nouveau article :
Question.update(
{
_id: questionId
},
{
$push: {
"votes": {
"up": vote.value,
"createdBy": vote.createdBy
}
}
}
);
Bien sûr, ajoutez les détails de rappel où writeConcern
est appliqué, ce que vous faites probablement.