MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Актуализирайте вложен обект в MongoDB, ако съществува, в противен случай го добавете

За да вмъкнете документ, ако не съществува, се прави от 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 г.)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb $graphLookup изгражда йерархия

  2. Google Cloud Platform – Не мога да се свържа с mongodb

  3. Laravel 5 изпълнява агрегиране с mongodb on where клауза

  4. Как да конфигурирам mongo да работи в докер за използване на външно устройство на Windows

  5. Преобразувайте JSON условия на заявка в MongoDB/Mongoose операции