Takže jste součástí cesty tam, ale samozřejmě když nenajdete doc
pak nebudete mít doc
pracovat při zpětném volání. MongoDB má nativní způsoby zpracování těchto druhů aktualizací, ale samozřejmě musíte otestovat shodu jako vy.
Co zde můžeme udělat, je pracovat v rámci true
nebo false
stav, kde dokument existuje.
S ohledem na vote.value
aby byl váš true
nebo false
pro "hlas"
Pokud zjistíte, že existuje odpovídající dokument, můžete vydat aktualizaci takto:
Question.update(
{
_id: questionId,
"votes.createdBy" vote.createdBy,
"votes.up": {"$ne": vote.value }
},
{ $set: { "votes.$.up": vote.value } }
);
Takže to odpovídá a používá poziční
$
operátora, abyste se ujistili o správném indexu odpovídající položky se aktualizuje. To, co jsem tam přidal, zajišťuje, že se ani nedotknete dokumentu, kde je vote.vaule
má již stejnou hodnotu.
A ve falešném stavu chcete $push do pole s novým položka:
Question.update(
{
_id: questionId
},
{
$push: {
"votes": {
"up": vote.value,
"createdBy": vote.createdBy
}
}
}
);
Samozřejmě přidejte podrobnosti zpětného volání do writeConcern
je použito, což pravděpodobně děláte.