2016-08-08 7 views
5

जो मैं करने की कोशिश करता हूं वह काफी सरल है, मेरे पास दस्तावेज़ के अंदर एक सरणी है;मोंगोडीबी डालने दस्तावेज़ "या" सरणी क्षेत्र में मौजूद है यदि

"tags": [ 
    { 
     "t" : "architecture", 
     "n" : 12 
    }, 
    { 
     "t" : "contemporary", 
     "n" : 2 
    }, 
    { 
     "t" : "creative", 
     "n" : 1 
    }, 
    { 
     "t" : "concrete", 
     "n" : 3 
    } 
] 

मैं की तरह

["architecture","blabladontexist"] 

सरणी के लिए आइटम की एक सरणी पुश करने के लिए चाहते हैं आइटम मौजूद है, तो मैं, वस्तु की n मूल्य बढ़ाने के लिए (इस मामले में अपनी architecture में)

और अगर चाहते हैं नहीं, इसे एक नई वस्तु के रूप में जोड़ें (n=0 के मूल्य के साथ) { "t": "blabladontexist", "n":0}

मैंनेकी कोशिश की है, $set, $inc, $upsert: true इतने सारे संयोजन के साथ और यह नहीं कर सका।

हम MongoDB में यह कैसे कर सकते हैं?

+0

क्या आपने समेकन पाइपलाइन को देखा है? –

+1

मुझे लगता है कि यह एकीकरण के लिए समाधान नहीं है, क्योंकि यह सिर्फ संग्रह से डेटा का चयन करता है। @ सैडेटिन बिलाल सावास को सम्मिलित डेटा की आवश्यकता है। इसका कारण केवल तभी होता है जब संग्रह की संरचना बदली जाएगी। – Kison

+0

क्या आप समाधान के रूप में अपने डेटा की संरचना को बदलने पर विचार करेंगे? उदाहरण के लिए, आप अपने 'टैग' सरणी में' टैग' इकाई आईडी के संदर्भ हो सकते हैं। –

उत्तर

0

मुझे विश्वास नहीं है कि यह एक ही कमांड में करना संभव है।

MongoDB एक एकल सेट में एक ही फ़ील्ड को प्रभावित करने के लिए $ सेट (या $ setOnInsert) और $ inc की अनुमति नहीं देता है।

आप $ इंक क्षेत्र के लिए प्रयास करने के लिए एक अद्यतन आदेश करना होगा, और कहा कि अगर किसी भी दस्तावेज नहीं बदलता है (एन = 0), अद्यतन $ क्षेत्र के लिए यह डिफ़ॉल्ट मान है स्थापित करने के लिए करते हैं।

संबंधित मुद्दे