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

MongoDB i upsert problem

Po pierwsze, nie wygląda na to, że w ogóle robisz upsser. Składnia dla tego w Java API miałaby trzeci argument db.update ustawiony na true.

   db.update(com.mongodb.DBObject, com.mongodb.DBObject, boolean /*upsert */, boolean /* multi */)

Nie powinieneś też robić $push - semantyka tego, co chcesz zrobić w powłoce mongo, to:

db.collection.update( {"resourceVacation":resourceID}, {$set:{"vacationList":[...]}, true)

To mówi:jeśli istnieje resourceVacation mający identyfikator zasobu, utwórz jego "vacationList" to, co ci daję. Jeśli nie istnieje, wstaw ten rekord.

Jeśli używasz bezpośrednio Java API, odpowiednik powyższego byłby wystarczający.

Wygląda na to, że używasz MongoTemplate z wiosny. Musisz sprawdzić, jakiej wersji używasz, ponieważ nie zezwalała na upserts . Ten problem jest jednak oznaczony jako rozwiązany. Jeśli utknąłeś na starszej wersji, istnieje opisane obejście tutaj .

Jeśli jesteś najnowszy, powinieneś być w stanie bezpośrednio użyć nowo dodanej metody upsert, zgodnie z opisem tutaj .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zabezpieczanie MongoDB przed atakami z zewnętrznego wstrzykiwania

  2. jak liczyć osadzone php mongodb?

  3. Używanie findOne w mongodb, aby uzyskać element o maksymalnym identyfikatorze

  4. MongoDB Jak uzyskać wszystkie AKTUALNIE otwarte kursory i zapytania, które uruchamiają?

  5. Jak zapisać 1 milion rekordów w mongodb asynchronicznie?