Så du är en del av vägen dit, men naturligtvis när du inte hittar ett doc
då kommer du inte att ha ett doc
att arbeta med i återuppringningen. MongoDB har inbyggda sätt att hantera den här typen av uppdateringar, men du måste naturligtvis testa för matchen som du är.
Vad vi kan göra här är att bara arbeta inom true
eller false
skick för var dokumentet finns.
Överväger vote.value
att vara din true
eller false
för "uppröstningen"
Om du upptäcker att det finns ett matchande dokument kan du utfärda en uppdatering så här:
Question.update(
{
_id: questionId,
"votes.createdBy" vote.createdBy,
"votes.up": {"$ne": vote.value }
},
{ $set: { "votes.$.up": vote.value } }
);
Så det matchar och använder en positionell
$
operatör för att se till att index är korrekt av den matchande artikeln uppdateras. Det jag lade till där ser till att du inte ens rör dokumentet där vote.vaule
har redan samma värde.
Och i det falska tillståndet vill du $push till arrayen med nya objekt:
Question.update(
{
_id: questionId
},
{
$push: {
"votes": {
"up": vote.value,
"createdBy": vote.createdBy
}
}
}
);
Lägg naturligtvis till återuppringningsdetaljerna där writeConcern
tillämpas, vilket du förmodligen gör.