Sie sind also ein Teil des Weges dorthin, aber natürlich, wenn Sie kein doc
finden dann haben Sie kein doc
im Rückruf zu arbeiten. MongoDB verfügt über native Methoden zur Handhabung dieser Art von Aktualisierungen, aber natürlich müssen Sie die Übereinstimmung testen so wie du bist.
Was wir hier tun können, ist einfach innerhalb des true
zu arbeiten oder false
Bedingung, wo das Dokument existiert.
Unter Berücksichtigung von vote.value
Ihr true
sein oder false
für die "Upvote"
Wenn Sie feststellen, dass es ein passendes Dokument gibt, können Sie eine Aktualisierung wie folgt herausgeben:
Question.update(
{
_id: questionId,
"votes.createdBy" vote.createdBy,
"votes.up": {"$ne": vote.value }
},
{ $set: { "votes.$.up": vote.value } }
);
Das entspricht und verwendet also eine Position
$
Operator, um sicherzustellen, dass der Index korrekt ist des übereinstimmenden Elements wird aktualisiert. Was ich dort hinzugefügt habe, stellt sicher, dass Sie das Dokument, in dem sich die vote.vaule
befindet, nicht einmal berühren hat bereits den gleichen Wert.
Und in der falschen Bedingung möchten Sie $push auf das Array mit dem neuen Artikel:
Question.update(
{
_id: questionId
},
{
$push: {
"votes": {
"up": vote.value,
"createdBy": vote.createdBy
}
}
}
);
Fügen Sie natürlich die Callback-Details hinzu, wo writeConcern
angewendet wird, was Sie wahrscheinlich auch tun.