MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как актуализирате обекти в масива на документ (вложено актуализиране)

За въпрос №1, нека го разделим на две части. Първо, увеличете всеки документ, който има "items.item_name", равно на "my_item_two". За това ще трябва да използвате позиционния оператор "$". Нещо като:

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

Обърнете внимание, че това ще увеличи само първия съвпадащ поддокумент във всеки масив (така че ако имате друг документ в масива с „item_name“ равно на „my_item_two“, той няма да бъде увеличен). Но това може да е това, което искате.

Втората част е по-сложна. Можем да изпратим нов елемент в масив без "my_item_two", както следва:

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

За вашия въпрос №2 отговорът е по-лесен. За да увеличите общата сума и цената на item_three във всеки документ, който съдържа "my_item_three", можете да използвате оператора $inc в няколко полета едновременно. Нещо като:

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. XFS срещу EXT4 – Сравняване на производителността на MongoDB на AWS EC2

  2. MongoDB какви са потребителят и паролата по подразбиране?

  3. създаване и актуализиране на множество MongoDB документи в едно обаждане

  4. Функции на MongoDB в ClusterControl 1.4

  5. Какво е новото в MongoDB 4.2