प्रश्न #1 के लिए, आइए इसे दो भागों में विभाजित करें। सबसे पहले, "my_item_two" के बराबर "items.item_name" वाले किसी भी दस्तावेज़ को बढ़ाएँ। इसके लिए आपको स्थितीय "$" ऑपरेटर का उपयोग करना होगा। कुछ इस तरह:
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 के लिए, उत्तर आसान है। "my_item_three" वाले किसी भी दस्तावेज़ में आइटम_थ्री की कुल और कीमत बढ़ाने के लिए, आप एक ही समय में कई फ़ील्ड पर $inc ऑपरेटर का उपयोग कर सकते हैं। कुछ इस तरह:
db.bar.update( {"items.item_name" : {$ne : "my_item_three" }} ,
{$inc : {total : 1 , "items.$.price" : 1}} ,
false ,
true);