sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur uppdaterar du objekt i ett dokuments array (kapslade uppdatering)

För fråga #1, låt oss dela upp den i två delar. Öka först alla dokument som har "items.item_name" lika med "my_item_two". För detta måste du använda positionsoperatorn "$". Något i stil med:

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

Observera att detta endast kommer att öka det första matchade underdokumentet i någon array (så om du har ett annat dokument i arrayen med "item_name" lika med "my_item_two", kommer det inte att ökas). Men det här kanske du vill ha.

Den andra delen är knepigare. Vi kan skicka ett nytt objekt till en array utan "my_item_two" enligt följande:

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

För din fråga #2 är svaret enklare. För att öka summan och priset för artikel_tre i alla dokument som innehåller "min_artikel_tre" kan du använda operatorn $inc på flera fält samtidigt. Något i stil med:

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


  1. MongoDB $dateToString

  2. Flask-Mail och Redis Queue biblioteksintegration ger fel

  3. Hur använder man Elasticsearch med MongoDB?

  4. ställ in fältet som tomt för mongoobjekt med mongoose