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

Jak aktualizować obiekty w tablicy dokumentu (aktualizacja zagnieżdżona)

W przypadku pytania nr 1 podzielmy je na dwie części. Najpierw zwiększ każdy dokument, który ma „items.item_name” równy „my_item_two”. W tym celu będziesz musiał użyć operatora pozycyjnego „$”. Coś takiego:

 db.bar.update( {user_id : 123456 , "items.item_name" : "my_item_two" } , 
                {$inc : {"items.$.price" : 1} } , 
                false , 
                true);

Zauważ, że spowoduje to zwiększenie tylko pierwszego dopasowanego dokumentu podrzędnego w dowolnej tablicy (więc jeśli masz inny dokument w tablicy z „nazwa_elementu” równą „mój_element_dwa”, nie zostanie on zwiększony). Ale może to być to, czego chcesz.

Druga część jest trudniejsza. Możemy wepchnąć nowy element do tablicy bez „my_item_two” w następujący sposób:

 db.bar.update( {user_id : 123456, "items.item_name" : {$ne : "my_item_two" }} , 
                {$addToSet : {"items" : {'item_name' : "my_item_two" , 'price' : 1 }} } ,
                false , 
                true);

Na twoje pytanie nr 2 odpowiedź jest łatwiejsza. Aby zwiększyć sumę i cenę item_three w dowolnym dokumencie, który zawiera „my_item_three”, możesz użyć operatora $inc na wielu polach jednocześnie. Coś takiego:

db.bar.update( {"items.item_name" : {$ne : "my_item_three" }} ,
               {$inc : {total : 1 , "items.$.price" : 1}} ,
               false ,
               true);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Monitorowanie serwera Percona dla MongoDB — kluczowe wskaźniki

  2. Skrobanie i indeksowanie stron internetowych za pomocą Scrapy i MongoDB

  3. Odpowiednik procedury przechowywanej MongoDB

  4. mongodb Failed:błąd łączenia z serwerem db:brak osiągalnych serwerów

  5. Doskonalenie sztuki automatyzacji i zarządzania najpopularniejszymi bazami danych typu open source:2017 @ Severalnines