2011-01-23 21 views
6

के लिए और धक्का बनाने के लिए, मैं निम्नलिखित रूप में एक दस्तावेज है:MongoDB - डॉक यदि मौजूद नहीं सरणी

{ 
"_id" : ObjectId("4d2d8deff4e6c1d71fc29a07"), 
"user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0", 
"events" : [ 
     { 
       "profile" : 10, 
       "data" : "....." 
     } 
     { 
       "profile" : 10, 
       "data" : "....." 
     } 
     { 
       "profile" : 20, 
       "data" : "....." 
     } 
     ... 
    ] 
} 

मैं upsert बयान के कुछ प्रकार करना चाहते हैं। events सरणी user_id के लिए user_id में 0 डीमें जोड़ने की आवश्यकता है, यदि पहले से ही इस तरह के दस्तावेज़ मौजूद हैं, तो इसे event आइटम के साथ दस्तावेज़ बनाने की आवश्यकता है।

क्या यह किया जा सकता है?

उत्तर

13

आप मोंगो में upserts कर सकते हैं, Mongo doc से "संशोधक साथ Upserts" देखें:

आप एक आपरिवर्तक संचालन के साथ Upsert उपयोग कर सकते हैं। ऐसे मामले में, संशोधक अद्यतन मानदंड सदस्य और पर लागू किए जाएंगे जिसके परिणामस्वरूप ऑब्जेक्ट डाला जाएगा।

क्वेरी आप की तरह दिखाई देगा की जरूरत है:

db.events.update({ "user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0" }, 
{ $push : { "events" : { "profile" : 10, "data" : "X"}}}, {"upsert" : true}); 
+1

शायद मैं एक अलग संस्करण का उपयोग कर रहा है, लेकिन केवल अंतिम अद्यतन पैरामीटर यह काम नहीं करता के रूप में सच के साथ। मुझे तर्क के रूप में {upsert: true} रखना पड़ा। –

+0

आप सही आर्टूर हैं। अपडेट किया गया। –

+0

को नोट करने के लिए धन्यवाद @ जेवियर फेरेरो उदाहरण केवल $ पुश दिखाता है, उपयोगकर्ता_डाइप के बाद फ़ील्ड जैसे अपडेट किए जाने के बाद क्या होगा ..? –

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