2017-01-27 6 views
5

मैं MongoDB में तत्व की सरणी के समूह आ रही हैं कि सरणी में नए तत्व सम्मिलित नीचे दिए गए के रूप में:अद्यतन तत्व यदि किसी और मौजूद है MongoDB

{ 
    "_id" : 5, 
    "quizzes" : [ 
     { 
      "wk" : 1, 
      "score" : 10 
     }, 
     { 
      "wk" : 2, 
      "score" : 8 
     }, 
     { 
      "wk" : 3, 
      "score" : 5 
     } 
     ], 
    "play" : [ 
     { 
      "wk" : 2, 
      "score" : 8 
     }, 
     { 
      "wk" : 3, 
      "score" : 5 
     } 
    ] 
} 

मैं सरणी में नहीं तो नया रिकार्ड डालने कोशिश कर रहा हूँ वर्तमान और यदि उस सरणी में रिकॉर्ड मौजूद है तो उस सरणी रिकॉर्ड को अद्यतन करें। नीचे मेरी MongoDB क्वेरी है।

db.push.update(
    { _id: 5 }, 
    { $push: { "quizzes": {"wk" : 6.0,"score" : 8.0},"play": {"wk" : 6.0,"score" : 8.0} } } 
) 

हर बार जब मैं इस क्वेरी निष्पादित यह सरणी में नया रिकार्ड सम्मिलित करता है, लेकिन मैं चाहता हूँ रिकॉर्ड मौजूद तो है कि सरणी अद्यतन करें।

+0

का उपयोग करते समय आप 'अगर रिकॉर्ड वर्तमान' * * कहते हैं आदेश, आप एक ही 'wk' या एक ही' score' या एक ही 'साथ रिकॉर्ड मतलब है सप्त 'और 'स्कोर'? –

+0

वही wk और स्कोर। – 5a01d01P

उत्तर

8

उपयोग $push के बजाय $addToSet

db.push.update(
    { _id: 5 }, 
    { $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } } 
) 

संपादित करें:

वहाँ एक सरणी क्षेत्र में सशर्त उप दस्तावेज़ अद्यतन, विशिष्ट संपत्ति से के लिए कोई साधारण में निर्मित दृष्टिकोण है। हालांकि, अनुक्रम में दो आदेशों को निष्पादित करके एक छोटी सी चाल नौकरी कर सकती है।

उदाहरण के लिए:

चरण 1: बाहर quizzes सरणी जहां "wk": 7.0 से उप दस्तावेजों $pull हम वस्तु { "wk": 7.0, "score": 8.0 } साथ quizzes क्षेत्र को अपडेट करना चाहते हैं, तो हम यह दो चरणों में कर सकते हैं। (कुछ भी नहीं होता है यदि मिलान उप-दस्तावेज़ नहीं मिला)।

db.push.update(
    { _id: 5 }, 
    { $pull: { "quizzes": { "wk": 7.0 } } } 
) 

चरण -2:$addToSet उप दस्तावेज़।

db.push.update(
    { _id: 5 }, 
    { $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } } 
) 

आप को जोड़ सकते हैं उपरोक्त दो अद्यतन bulk.find().update()

+0

संतानु बिस्वास .. आपकी प्रतिक्रिया के लिए धन्यवाद। कृपया मुझे बताएं कि अगर मेरे सरणी में "wk" मान समान हैं, लेकिन यदि "स्कोर" मान अपडेट हो जाता है तो मैं उस सरणी मान को अपडेट करना चाहता हूं बल्कि उस सरणी में नया तत्व डालना चाहता हूं। – 5a01d01P

+0

@ user3720965 मुझे आश्चर्य है कि आपने इसे सही उत्तर के रूप में क्यों हटा दिया! –

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