sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan opdaterer du objekter i et dokuments array (indlejret opdatering)

For spørgsmål #1, lad os dele det op i to dele. Forøg først ethvert dokument, der har "items.item_name" lig med "my_item_two". Til dette skal du bruge den positionelle "$"-operator. Noget som:

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

Bemærk, at dette kun vil øge det første matchede underdokument i et hvilket som helst array (så hvis du har et andet dokument i arrayet med "item_name" lig med "my_item_two", bliver det ikke inkrementeret). Men det er måske det, du ønsker.

Anden del er sværere. Vi kan skubbe et nyt element til et array uden "my_item_two" som følger:

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

For dit spørgsmål #2 er svaret nemmere. For at øge totalen og prisen på item_three i ethvert dokument, der indeholder "my_item_three", kan du bruge $inc-operatoren på flere felter på samme tid. Noget som:

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


  1. Forstå MongoDB-indekser

  2. Fejl:getaddriinfo ENOTFOUND i nodejs for get call

  3. Hvad er den bedste måde at håndtere global forbindelse af Mongodb i NodeJs

  4. Unikke dokumenter, der bruger flere værdier i Mongoose Schema