Để chèn một tài liệu nếu không tồn tại được thực hiện bằng cách upert và nếu bạn muốn cập nhật một tài liệu nhúng có điều kiện, bạn cần toán tử $ positional. Vì vậy, bạn cần sử dụng cả hai trong truy vấn để triển khai chức năng trên.
Nhưng hiện tại mongodb không hỗ trợ nâng cấp với toán tử $ positional
Vì vậy, những gì bạn muốn không thể thực hiện trong một truy vấn ngay bây giờ, hoặc bạn có thể thực hiện trong hai truy vấn.
Đầu tiên
db.collection('ratings').update(
{"refid":refid, "votes.ip": ip},
{
$set: { "votes.$.rating":rating }
}
)
Nó trả về số lượng tài liệu được cập nhật, nếu là 1 thì tốt, còn nếu là 0 thì bạn cần phải đẩy bản ghi mới.
db.collection('ratings').update( { "refid":refid, "votes.ip":{$ne: ip}},
{$push: { votes: { "ip":ip , "rating":rating }}
})
Ngoài ra còn có vé jira cho nhà điều hành vị trí và uperting, vui lòng bỏ phiếu cho vấn đề này nếu bạn muốn chức năng này trong mongodb. Dưới đây là liên kết của vấn đề
https://jira.mongodb.org/browse/SERVER-3326
( CHỈNH SỬA :Vé jira đã bị đóng lại với Sẽ không làm vào tháng 6 năm 2019)