2015-09-28 12 views
6

मैं थोक प्रविष्टि निष्पादित कैसे कर सकता हूं और डुप्लिकेट कुंजी त्रुटि के मामले में जारी रख सकता हूं?mongodb थोक सम्मिलित करें डुप्लिकेट कुंजी त्रुटि

मैं इसे में कुछ डेटा id क्षेत्र (नहीं_id) पर एक अद्वितीय सूचकांक और के साथ एक संग्रह है। फिर मुझे अधिक डेटा मिलता है और मैं संग्रह में केवल गैर-मौजूद दस्तावेज़ जोड़ना चाहता हूं।

मैं निम्नलिखित कोड है:

let opts = { 
    continueOnError: true, // Neither 
    ContinueOnError: true, // of 
    keepGoing: true,  // this 
    KeepGoing: true,  // works 
}; 
let bulk = collection.initializeUnorderedBulkOp(opts); 
bulk.insert(d1); 
bulk.insert(d2); 
bulk.insert(d3); 
... 
bulk.insert(dN); 
let result = yield bulk.execute(opts); // this keep throwing duplicate key error 

और मैं सिर्फ त्रुटियों को अनदेखा करके सभी कतारबद्ध संचालन के साथ थोक खत्म बताना चाहते हैं

मैं npm module api में और Bulk, initializeUnorderedBulkOp के लिए MongoDB एपीआई और कोई भाग्य के साथ Bulk write के लिए डॉक्स में खोजा गया।

हैंडलिंग लिखने के संचालन में से एक के प्रसंस्करण के दौरान कोई त्रुटि होती है त्रुटि, MongoDB प्रक्रिया के लिए जारी रहेगा:


इसके अलावा अक्रमित संचालन के लिये दस्तावेज वे say में

सूची में शेष लिखने के संचालन।

कौन सा (कम से कम मेरे मामले में) सच नहीं है :(

किसी भी विचारों का स्वागत है!

+0

यह भ्रामक है और त्रुटि मामले वास्तव में के रूप में पहले से एक 'UnOrderdedBukOp' निर्माण कोई त्रुटि उत्पन्न कभी नहीं होगा कि" thows ", लेकिन केवल एक का उत्पादन, हाल ही में रिलीज में बदल गया है प्रतिक्रिया में "त्रुटियों की सूची"। इस बारे में शिकायत करने वाले पहले व्यक्ति नहीं हैं। सामान्य सलाह त्रुटि को अनदेखा करती है और परिणाम ऑब्जेक्ट का निरीक्षण करती है, क्योंकि परिणाम ** हमेशा ** बैच के अंत तक जारी रहेगा। तो आप सही नहीं हैं क्योंकि वास्तव में ** ने ** सूची में सभी परिचालनों को लिखा है (जो काम करता है), लेकिन यह सिर्फ एक त्रुटि फेंक दिया, जब मुझे लगता है कि यह नहीं होना चाहिए। –

+0

स्पष्टीकरण के लिए धन्यवाद, लेकिन मेरी समस्या यह है कि 'निष्पादन विधि', वादे का उपयोग करके, अपवाद उठाता है और वादा केवल त्रुटि के साथ खारिज कर दिया जाएगा; 'BulkWriteResult' ऑब्जेक्ट खोना। – Volox

+0

हां। यह बिल्कुल मेरी प्रतिक्रिया है। पहले ड्राइवरों ने इस मामले में अपवाद नहीं उठाया, अब वे करते हैं। हालांकि इसका कोई असर नहीं पड़ता कि "अनऑर्डर्ड" ऑप्स कैसे संसाधित होते हैं। बैच "अभी भी" पूरी तरह से निष्पादित किया गया है, हालांकि, प्रतिक्रिया ऑब्जेक्ट में केवल "त्रुटियों" को वापस करने के बजाय परिणाम "फेंकता" और त्रुटि कम से कम एक त्रुटि निष्पादन में हुई है। समझ गये? –

उत्तर

2

आप (संस्करण 3.2 की नई।) Db.collection.insertMany(), का उपयोग कर सकते साथ:

आदेश दिया: झूठी

झूठी करने का आदेश दिया साथ, और नकली चाबी गलती की स्थिति में, सम्मिलित ऑपरेशन किसी भी शेष दस्तावेज के साथ जारी रहेगा।

यहाँ प्रलेखन के लिए लिंक है: https://docs.mongodb.com/v3.2/reference/method/db.collection.insertMany/

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