Така че вие сте част от пътя дотам, но разбира се, когато не намерите doc
тогава няма да имате doc
за работа в обратното извикване. MongoDB има собствени начини за обработка на тези видове актуализации, но разбира се, трябва да тествате за съвпадение какъвто си.
Това, което можем да направим тук, е просто да работим в рамките на true
или false
състояние, където съществува документът.
Имайки предвид vote.value
да бъде твоята true
или false
за „гласуване за“
Когато установите, че има съответстващ документ, можете да издадете актуализация като тази:
Question.update(
{
_id: questionId,
"votes.createdBy" vote.createdBy,
"votes.up": {"$ne": vote.value }
},
{ $set: { "votes.$.up": vote.value } }
);
Така че съвпада и използва позиционен
$
оператор, за да се уверите в правилния индекс на съответстващия елемент се актуализира. Това, което добавих там, гарантира, че дори не докосвате документа, където vote.vaule
вече е със същата стойност.
И в условието false искате да $push върху масива с новите елемент:
Question.update(
{
_id: questionId
},
{
$push: {
"votes": {
"up": vote.value,
"createdBy": vote.createdBy
}
}
}
);
Разбира се, добавете детайлите за обратно извикване там, където writeConcern
се прилага, което вероятно правите.