Então você faz parte do caminho até lá, mas é claro que quando você não encontra um
doc
então você não terá um doc
para trabalhar no retorno de chamada. O MongoDB tem maneiras nativas de lidar com esses tipos de atualizações, mas é claro que você precisa testar a correspondência como você está. O que podemos fazer aqui é apenas trabalhar dentro do
true
ou false
condição de onde o documento existe. Considerando
vote.value
para ser seu true
ou false
para o "voto positivo" Onde você achar que existe um documento correspondente, você pode emitir uma atualização como esta:
Question.update(
{
_id: questionId,
"votes.createdBy" vote.createdBy,
"votes.up": {"$ne": vote.value }
},
{ $set: { "votes.$.up": vote.value } }
);
Para que corresponda e use um posicional
$
operador para certificar-se de que o índice correto do item correspondente é atualizado. O que eu adicionei garante que você nem toque no documento onde o vote.vaule
já tem o mesmo valor. E na condição falsa você deseja $push na matriz com o novo item:
Question.update(
{
_id: questionId
},
{
$push: {
"votes": {
"up": vote.value,
"createdBy": vote.createdBy
}
}
}
);
Claro, adicione os detalhes de retorno de chamada onde
writeConcern
é aplicado, o que você provavelmente faz.