Vì vậy, bạn là một phần của con đường đến đó, nhưng tất nhiên khi bạn không tìm thấy doc
thì bạn sẽ không có doc
để làm việc với trong cuộc gọi lại. MongoDB có các cách nguyên bản để xử lý các loại cập nhật này, nhưng tất nhiên bạn cần phải kiểm tra đối sánh như bạn đang có.
Những gì chúng ta có thể làm ở đây chỉ là làm việc trong true
hoặc false
tình trạng tài liệu tồn tại ở đâu.
Xem xét vote.value
là true
của bạn hoặc false
cho "ủng hộ"
Nếu bạn thấy rằng có một tài liệu phù hợp, bạn có thể phát hành một bản cập nhật như sau:
Question.update(
{
_id: questionId,
"votes.createdBy" vote.createdBy,
"votes.up": {"$ne": vote.value }
},
{ $set: { "votes.$.up": vote.value } }
);
Vì vậy, phù hợp và sử dụng vị trí
$
toán tử để đảm bảo chỉ mục chính xác của mặt hàng phù hợp được cập nhật. Những gì tôi đã thêm ở đó đảm bảo rằng bạn thậm chí không chạm vào tài liệu có vote.vaule
đã có cùng giá trị.
Và trong điều kiện sai, bạn muốn $ push vào mảng có mới mục:
Question.update(
{
_id: questionId
},
{
$push: {
"votes": {
"up": vote.value,
"createdBy": vote.createdBy
}
}
}
);
Tất nhiên, hãy thêm chi tiết gọi lại vào nơi writeConcern
được áp dụng, mà bạn có thể làm.