मान लें हम निम्नलिखित संग्रह है, जो मैं के बारे में कुछ प्रश्न हैं है:MongoDB - अद्यतन दस्तावेज़ की सरणी (नेस्ट अपडेट करना) में वस्तुओं
{
"_id" : ObjectId("4faaba123412d654fe83hg876"),
"user_id" : 123456,
"total" : 100,
"items" : [
{
"item_name" : "my_item_one",
"price" : 20
},
{
"item_name" : "my_item_two",
"price" : 50
},
{
"item_name" : "my_item_three",
"price" : 30
}
]
}
1 - मैं "ITEM_NAME" के लिए कीमत में वृद्धि करना चाहते हैं: " my_item_two "और यदि यह मौजूद नहीं है, तो इसे" आइटम "सरणी में जोड़ा जाना चाहिए।
2 - मैं एक ही समय में दो फ़ील्ड कैसे अपडेट कर सकता हूं। उदाहरण के लिए, "my_item_three" के लिए कीमत बढ़ाएं और साथ ही साथ "कुल" (उसी मान के साथ) बढ़ाएं।
मैं इसे मोंगोडीबी पक्ष पर करना पसंद करता हूं, अन्यथा मुझे क्लाइंट-साइड (पायथन) में दस्तावेज़ लोड करना होगा और अपडेट किए गए दस्तावेज़ का निर्माण करना होगा और इसे मोंगोडीबी में मौजूदा एक के साथ बदलना होगा।
अद्यतन यह मैं क्या कोशिश की है और ठीक काम करता है यदि वस्तु मौजूद है:
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
लेकिन अगर कुंजी मौजूद नहीं है यह कुछ नहीं करता है। इसके अलावा यह केवल नेस्टेड ऑब्जेक्ट को अपडेट करता है। इस आदेश के साथ "कुल" फ़ील्ड को अपडेट करने का कोई तरीका नहीं है।
मुझे लगता है कि आप इसे मोंगो में नहीं कर सकते हैं, सिवाय इसके कि बहुत से दर्द का उपयोग करके। मोंगो डेटा ऑप्स में बहुत सीमित है। –
@ हापाला: मोंगोडब के पास $ इंकर्ट – jdi
@jdi हां हां के साथ $ inc और अपडेट है, लेकिन यह यहां बहुत मदद नहीं करता है, लेकिन उसे जो चाहिए वह कई $ incs है, सशर्त रूप से, और यदि आइटम मौजूद नहीं है, तो एक $ पुश है जरूरत है। –