sql >> Databáze >  >> NoSQL >> MongoDB

Jak aktualizujete objekty v poli dokumentu (vnořená aktualizace)

U otázky č. 1 ji rozdělme na dvě části. Nejprve zvyšte každý dokument, který má "items.item_name" rovný "my_item_dwo". K tomu budete muset použít poziční operátor "$". Něco jako:

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

Všimněte si, že to zvýší pouze první odpovídající vnořený dokument v libovolném poli (takže pokud máte v poli jiný dokument s "item_name" rovným "my_item_two", nezvýší se). Ale může to být to, co chcete.

Druhá část je složitější. Novou položku můžeme vložit do pole bez "my_item_two" následovně:

 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 vaši otázku č. 2 je odpověď jednodušší. Chcete-li zvýšit celkovou částku a cenu položky item_three v libovolném dokumentu, který obsahuje „my_item_three“, můžete použít operátor $inc na více polích současně. Něco jako:

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


  1. Deadlock pomocí Aggregator + Redis

  2. SocketTimeout s otevřeným připojením v MongoDB

  3. Jak škálovat Node.js WebSocket Redis Server?

  4. Dotaz na MongoDB pomocí $and a Multiple $or