Jadi Anda adalah bagian dari perjalanan ke sana, tetapi tentu saja ketika Anda tidak menemukan doc
maka Anda tidak akan memiliki doc
untuk bekerja dengan dalam panggilan balik. MongoDB memiliki cara asli untuk menangani pembaruan semacam ini, tetapi tentu saja Anda perlu menguji kecocokan seperti Anda.
Apa yang bisa kita lakukan di sini hanyalah bekerja dalam true
atau false
kondisi keberadaan dokumen.
Mempertimbangkan vote.value
untuk menjadi true
your Anda atau false
untuk "suara positif"
Jika Anda menemukan bahwa ada dokumen yang cocok, Anda dapat mengeluarkan pembaruan seperti ini:
Question.update(
{
_id: questionId,
"votes.createdBy" vote.createdBy,
"votes.up": {"$ne": vote.value }
},
{ $set: { "votes.$.up": vote.value } }
);
Sehingga cocok dan menggunakan posisional
$
operator untuk memastikan indeks yang benar item yang cocok diperbarui. Apa yang saya tambahkan di sana memastikan bahwa Anda bahkan tidak menyentuh dokumen di mana vote.vaule
sudah memiliki nilai yang sama.
Dan dalam kondisi salah Anda ingin $push ke dalam larik dengan baru barang:
Question.update(
{
_id: questionId
},
{
$push: {
"votes": {
"up": vote.value,
"createdBy": vote.createdBy
}
}
}
);
Tentu saja tambahkan detail panggilan balik di mana writeConcern
diterapkan, yang mungkin Anda lakukan.