MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zaktualizuj zagnieżdżony obiekt w MongoDB, jeśli istnieje, w przeciwnym razie dodaj go

Aby wstawić dokument, jeśli nie istnieje, jest to wykonywane przez upsert, a jeśli chcesz zaktualizować osadzony dokument warunkowy, potrzebujesz operatora pozycyjnego $. Musisz więc użyć obu w zapytaniu, aby zaimplementować powyższą funkcjonalność.

Ale obecnie mongodb nie obsługuje zamiany z operatorem pozycyjnym $

Więc to, czego chcesz, nie jest na razie możliwe do wykonania w jednym zapytaniu, alternatywnie możesz to zrobić w dwóch zapytaniach.

Najpierw

db.collection('ratings').update(
  {"refid":refid, "votes.ip": ip},
  {
     $set: { "votes.$.rating":rating }
  }
)

Zwraca liczbę zaktualizowanych dokumentów, jeśli wynosi 1, to w porządku, a jeśli jest 0, musisz przekazać nowy rekord.

db.collection('ratings').update( { "refid":refid, "votes.ip":{$ne: ip}},
    {$push: { votes: { "ip":ip , "rating":rating  }}
})

Istnieje również ticket jira dla operatora pozycyjnego i upsertingu, proszę głosujcie na ten problem, jeśli chcecie tę funkcjonalność w mongodb. Poniżej znajduje się link do problemu

https://jira.mongodb.org/browse/SERVER-3326

(EDYTUJ :bilet jira został zamknięty za pomocą Nie zrobię w czerwcu 2019)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak utworzyć schemat Mongoose, który zapisuje dane wejściowe jako html w mongodb

  2. socket.io net::ERR_CONNECTION_CLOSED

  3. Mongodb :dlaczego show dbs nie pokazuje moich baz danych?

  4. Jak znaleźć minimalną wartość w mongodb

  5. Możliwość uruchomienia MongoDB na Linode 512 VPS?