За да вмъкнете документ, ако не съществува, се прави от upsert и ако искате да актуализирате условно вграден документ, ви трябва $ позиционен оператор. Така че трябва да използвате и двете в заявката, за да приложите горната функционалност.
Но в момента mongodb не поддържа поставяне с $ позиционен оператор
Така че това, което искате, засега не е възможно да го направите с една заявка, алтернативно можете да го направите с две заявки.
Първо
db.collection('ratings').update(
{"refid":refid, "votes.ip": ip},
{
$set: { "votes.$.rating":rating }
}
)
Връща броя на актуализираните документи, ако е 1 е добре, а ако е 0, трябва да натиснете нов запис.
db.collection('ratings').update( { "refid":refid, "votes.ip":{$ne: ip}},
{$push: { votes: { "ip":ip , "rating":rating }}
})
Има също билет jira за позиционен оператор и поставяне нагоре, моля, гласувайте за този проблем, ако искате тази функционалност в mongodb. По-долу е връзката на проблема
https://jira.mongodb.org/browse/SERVER-3326
(РЕДАКТИРАНЕ :Билетът за jira беше затворен с Не става през юни 2019 г.)