MongoError: यह MongoDB तैनाती रिट्रीबल राइट्स का समर्थन नहीं करता है। कृपया अपने कनेक्शन स्ट्रिंग में पुनर्प्रयास = गलत जोड़ें


10

मैं "mongoose": "^5.7.1"अपने Node.js प्रोजेक्ट में उपयोग कर रहा हूं । मैं एक एपीआई बना रहा हूं जिसमें दो दस्तावेजों में अपडेट करना शामिल है। इसलिए, मैं निम्नलिखित लेनदेन का उपयोग कर रहा हूं:

// Start the transaction
session = await mongoose.startSession()
session.startTransaction()

await Promise.all([
   <1st update operation>,
   <2nd update operation>
])

// Commit the transaction
session.commitTransaction()

जब मैं अपने स्थानीय वातावरण पर इस एप को हिट करता हूं, तो मुझे निम्नलिखित त्रुटि मिलती है:

MongoError: यह MongoDB तैनाती रिट्रीबल राइट्स का समर्थन नहीं करता है। कृपया अपने कनेक्शन स्ट्रिंग में पुनर्प्रयास = गलत जोड़ें।

जब मैंने दूरस्थ वातावरण पर इस एप को मारा, तब यह ठीक चलता है। मैं https://www.clever-cloud.com डेटाबेस क्लाउड और AWS को एपीआई क्लाउड के रूप में उपयोग कर रहा हूं ।

जैसा कि त्रुटि संदेश में लिखा गया है, मैंने डालने की कोशिश की है retryWrites=false

  • कनेक्शन स्ट्रिंग के अंत में जो मैं मानसून के रूप में गुजर रहा हूं mongodb://${ip}:${port}/${this.MONGO_DATABASE}?retryWrites=false
  • विकल्प के रूप retryWrites: falseमें mongoose.connectविधि के लिए पारित कर दिया ।
mongoose.connect(`mongodb://${ip}:${port}/${this.MONGO_DATABASE}`, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    retryWrites: false
  }, (err) => {...})

उपरोक्त में से किसी ने भी समस्या का समाधान नहीं किया।

नीचे mongo --versionकमांड का आउटपुट है :

db version v4.0.13
git version: bda366f0b0e432ca143bc41da54d8732bd8d03c0
allocator: system
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

मैंने डिबग किया है और इस त्रुटि को फेंकने के पीछे वास्तविक त्रुटि है:

MongoError: लेन-देन संख्या केवल एक प्रतिकृति सेट सदस्य या मोंगो पर अनुमत है

कृपया कुछ सुझाव दें।


मैंने इन त्रुटियों को भी देखना शुरू कर दिया। मैं Heroku पर Mlab का उपयोग कर रहा हूं। लेकिन क्लाइंट पर विकल्प जोड़ने से यह हल हो गया। मैंने सिर्फ यूआरआई संस्करण की कोशिश की और यह भी काम करता है। अजीब।
मिग

मैं एक स्टैंडअलोन सर्वर का उपयोग कर रहा हूं और यह इस त्रुटि का कारण बन रहा है। प्रारंभिक त्रुटि वास्तविक नहीं थी और बाद में प्रतिकृति-सेट या साझा समूहों के साथ हल किया जा सकता है। देखें npmjs.com/package/run-rs
एंड्रो डेवलपर

जवाबों:


2

MongoDB 4.0 में लेन-देन निस्संदेह सबसे रोमांचक नई सुविधा है। लेकिन दुर्भाग्य से, MongoDB स्थापित करने और चलाने के लिए अधिकांश उपकरण एक प्रतिकृति सेट के विपरीत एक स्टैंडअलोन सर्वर शुरू करते हैं। यदि आप एक स्टैंडअलोन सर्वर पर एक सत्र शुरू करने की कोशिश करते हैं, तो आपको यह त्रुटि मिलेगी।

आपके स्थानीय परिवेश पर प्रतिकृति-सेट का उपयोग करके इस समस्या को हल किया जा सकता है।

मैंने इस उद्देश्य के लिए रन-आरएस का उपयोग किया है ।


2

जैसा कि स्वीकृत उत्तर में सुझाव दिया गया है, आपको अपने स्थानीय सर्वर को लेन-देन करने में सक्षम होने के लिए सेट के रूप में चलाने की आवश्यकता है, जैसा कि स्टैंडअलोन सर्वर के विपरीत है।

हालांकि, प्रस्तावित समाधान के अलावा, आप आसानी से अपने स्टैंडअलोन स्थानीय डीबी को किसी भी तृतीय-पक्ष उपकरण का उपयोग किए बिना एक प्रतिकृति सेट में बदल सकते हैं , जैसे कि MongoDB प्रलेखन में निर्देशों का पालन करके , निम्नानुसार संक्षेप में:

  1. अपने स्टैंडअलोन मोंगॉड उदाहरण को रोकें, और इसे replSetतर्क के साथ पुनरारंभ करें ।
mongod --port 27017 --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost
  1. mongoशेल के साथ अपने उदाहरण से कनेक्ट करें , और नया प्रतिकृति सेट आरंभ करें।
rs.initiate()

अब आपके पास एक स्टैंडअलोन मोंगोडब सर्वर के बजाय एक प्रतिकृति सेट होना चाहिए, जहां आप एक बार में कई दस्तावेज़ों को अपडेट करने के लिए अपने स्थानीय वातावरण पर लेनदेन कर सकते हैं!

replSetहर बार जब आप सर्वर को शुरू करना चाहते हैं तो तर्क को शामिल करना न भूलें , अन्यथा इसे स्टैंडअलोन के रूप में शुरू किया जाएगा। मैं इसे फिर से चलाने के लिए चरण 1 में समान कमांड का उपयोग करता हूं।


वैकल्पिक रूप से, आप MongoDB प्रलेखन में इन अन्य निर्देशों के बाद परीक्षण वातावरण के लिए एक नया प्रतिकृति सेट तैनात कर सकते हैं


1

कृपया App/Config/databaseफ़ाइल संपादित करें 'retryWrites'=>falseMongodb कनेक्शन स्ट्रिंग में जोड़ें

मानगो डीबी कनेक्शन लिखें

'mongodb' => [
            'driver'   => 'mongodb',
            'host'     => env('MONGO_DB_HOST', 'lo*****'),
            'port'     => *****,
            'database' => env('MONGO_DB_DATABASE'),
            'username' => env('MONGO_DB_USERNAME'),
            'password' => env('MONGO_DB_PASSWORD'),
            'options'  => [
                'database'=> env('MONGO_DB_DATABASE'),
                'retryWrites'=>false
            ]
        ],

बचाओ और भागो


0

कृपया &retryWrites=falseअपने कनेक्शन स्ट्रिंग में जोड़ने का प्रयास करें

-

मुझे वास्तव में ओपी में उल्लिखित त्रुटियों को हमारे दूरस्थ डीबी सर्वर से कनेक्ट करते समय मिला, जबकि यह स्थानीय स्तर पर काम कर रहा था। मैंने सुझाव दिया कि त्रुटि होने पर प्रयास करने से पहले हमारे आम द्वारा होस्ट किए गए समर्थन से संपर्क करें।

-

यह हमारे मेजबान मोंगो साइट (mLab) ने कहा:

यह संभव है कि आपके ऐप के ड्राइवर को अधिक हाल के संस्करण में अपडेट किया गया था जो कि एक वायर्डटेगर-ओनली फीचर का उपयोग करने का प्रयास कर रहा है। जैसा कि त्रुटि का उल्लेख है, आपको अपने कनेक्शन स्ट्रिंग में & lt; रिट्रीव्रीट्स = गलत जोड़ना और जोड़ना होगा।

https://docs.mlab.com/faq/#why-am-i-getting-the-transaction-numbers-are-only-allowed-on-storage-engines-that-support-document-level-locking-error

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.