2015-04-06 10 views
16

MongoDB's documentation के अनुसार save पर एक कॉल एक नया दस्तावेज़ तैयार करेगा, या _id प्रदान किया गया है तो मौजूदा दस्तावेज़ को अपडेट करेगा। मोंगोस का प्रलेखन less detailed है और यह इसमें शामिल नहीं होगा या अपडेट करेगा।मोंगोस/मोंगोडीबी सहेजने पर डुप्लिकेट कुंजी त्रुटि फेंक रहा है?

मैं किसी दस्तावेज़ को अद्यतन करने के नेवला के save समारोह उपयोग करने का प्रयास कर रहा हूँ, लेकिन मैं त्रुटि प्राप्त हो रही:

{"error":{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: staging.participants.$_id _ dup key: { : ObjectId('5515a34ed65073ec234b5c5f') }"}}

करता है नेवला के save समारोह MongoDB के save समारोह की तरह एक Upsert करते हैं या यह सिर्फ एक डालने प्रदर्शन कर रहा है?

उत्तर

16

क्या परिभाषित करता है कि save एक सम्मिलित होगा या अद्यतन isNew ध्वज है, क्योंकि आप see here कर सकते हैं।

यह ध्वज स्वचालित रूप से false पर सेट होता है जब दस्तावेज़ उदाहरण find क्वेरी (या इसकी किसी भी भिन्नता) से वापस लौटाया जाता है। आप दस्तावेज़ को मैन्युअल instantiating रहे हैं, तो सहेजने से पहले गलत पर इस ध्वज सेट करने का प्रयास:, कि प्रारंभ हो जाएगा

var instance = new Model({ '_id': '...', field: '...' }); 
instance.isNew = false; 
instance.save(function(err) { /* ... */ }); 

भी एक init समारोह नहीं है दस्तावेज़ और automatically set isNew to false:

var data = { '_id': '...', field: '...' }; 
var instance = new Model(); 
instance.init(data, {}, function(err) { 
    instance.save(function(err) { /* ... */ }) 
}); 
संबंधित मुद्दे