Dus je bent een deel van de weg daarheen, maar natuurlijk als je geen doc
vindt dan heb je geen doc
om mee te werken bij het terugbellen. MongoDB heeft native manieren om met dit soort updates om te gaan, maar je moet natuurlijk wel testen voor de match zoals je bent.
Wat we hier kunnen doen is gewoon werken binnen de true
of false
staat van waar het document bestaat.
Gezien vote.value
om je true
te zijn of false
voor de "upvote"
Als je vindt dat er een overeenkomend document is, kun je een update als volgt uitgeven:
Question.update(
{
_id: questionId,
"votes.createdBy" vote.createdBy,
"votes.up": {"$ne": vote.value }
},
{ $set: { "votes.$.up": vote.value } }
);
Dus dat komt overeen met en gebruikt een positioneel
$
operator om ervoor te zorgen dat de juiste index van het overeenkomende item wordt bijgewerkt. Wat ik daar heb toegevoegd, zorgt ervoor dat je niet eens het document aanraakt waar de vote.vaule
is al van dezelfde waarde.
En in de valse toestand wil je $push op de array met de nieuwe artikel:
Question.update(
{
_id: questionId
},
{
$push: {
"votes": {
"up": vote.value,
"createdBy": vote.createdBy
}
}
}
);
Voeg natuurlijk de callback-details toe waar writeConcern
wordt toegepast, wat u waarschijnlijk doet.