सर्वर डिस्कवरी और निगरानी इंजन पदावनत है


104

मैं अपने Node.js ऐप के साथ Mongoose का उपयोग कर रहा हूं और यह मेरा कॉन्फ़िगरेशन है:

mongoose.connect(process.env.MONGO_URI, {
   useNewUrlParser: true,
   useUnifiedTopology: true,
   useCreateIndex: true,
   useFindAndModify: false
}).then(()=>{
    console.log(`connection to database established`)
}).catch(err=>{
    console.log(`db error ${err.message}`);
    process.exit(-1)
})

लेकिन कंसोल में यह अभी भी मुझे चेतावनी देता है:

DeprecationWarning: वर्तमान सर्वर डिस्कवरी और मॉनिटरिंग इंजन को हटा दिया जाता है, और भविष्य के संस्करण में हटा दिया जाएगा। नए सर्वर डिस्कवर और मॉनिटरिंग इंजन का उपयोग करने के लिए, MongoClient कंस्ट्रक्टर के लिए {{UUnifiedTopology: true} का विकल्प पास करें।

समस्या क्या है? मैं useUnifiedTopologyपहले उपयोग नहीं कर रहा था, लेकिन अब यह कंसोल में दिखाई देता है। मैंने इसे कॉन्फ़िगरेशन में जोड़ा लेकिन यह अभी भी मुझे यह चेतावनी देता है, क्यों? मैं भी उपयोग नहीं करता MongoClient

संपादित करें

जैसा कि फेलिप पलेट्स ने उत्तर दिया कि मानगो में एक समस्या थी और उन्होंने बाद के संस्करणों में इस बग को ठीक कर दिया। तो आप mongoose version को अपडेट करके समस्या का समाधान कर सकते हैं।

जवाबों:


184

अपडेट करें

Mongoose 5.7.1 जारी किया गया था और इस मुद्दे को ठीक करने के लिए लगता है, इसलिए useUnifiedTopologyउम्मीद के मुताबिक विकल्प काम को स्थापित करना ।

mongoose.connect(mongoConnectionString, {useNewUrlParser: true, useUnifiedTopology: true});

मूल उत्तर

मैं एक ही मुद्दे का सामना कर रहा था और Mongoose कोड पर गहरा गोता लगाने का फैसला किया: https://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology

मानगो के संस्करण 5.7 पर जोड़ा गया एक विकल्प माना जाता है और अभी तक अच्छी तरह से प्रलेखित नहीं है। मुझे पुस्तकालय के इतिहास में वर्णित इसका उल्लेख भी नहीं मिला https://github.com/Automattic/mongoose/blob/master/History.md

कोड में एक टिप्पणी के अनुसार:

  • @param {बूलियन} [Options.useUnifiedTopology = false] डिफ़ॉल्ट रूप से गलत। पर सेट करें trueMongoDB चालक की प्रतिकृति सेट में शामिल होना और इंजन की निगरानी sharded क्लस्टर।

इस त्रुटि के बारे में प्रोजेक्ट GitHub पर एक मुद्दा भी है: https://github.com/Automattic/mongoose/issues/8156

मेरे मामले में मैं एक प्रतिकृति सेट या शार्प्ड क्लस्टर में Mongoose का उपयोग नहीं करता और यद्यपि विकल्प गलत होना चाहिए। लेकिन अगर यह गलत है तो शिकायत सही होनी चाहिए। एक बार सच होने के बाद भी यह काम नहीं करता है, शायद इसलिए कि मेरा डेटाबेस प्रतिकृति सेट या शार्प्ड क्लस्टर पर नहीं चलता है।

मैंने 5.6.13 पर डाउनग्रेड किया है और मेरी परियोजना ठीक काम कर रही है। इसलिए अब जो एकमात्र विकल्प मैं देख रहा हूं, वह है इसे डाउनग्रेड करना और नए संस्करण के लिए अपडेट के फिक्स होने की प्रतीक्षा करना।


मैं एक ही (डाउनग्रेड संस्करण) सोचा, मैं mlab समूहों का उपयोग कर रहा हूँ तो शायद यही कारण है कि चेतावनी प्रसारित नहीं होती है?
एलआईएए

2
एक बग नवीनतम नेवला में नहीं है 5.7.7, तो आप का उपयोग createConnection()करने के बजाय connect(), जैसे mongoose.createConnection(conString, { useUnifiedTopology: true })useUnifiedTopologyध्यान में नहीं लिया जाएगा और आप अभी भी चेतावनी प्राप्त करेंगे। घटना के साथ mongoose.set('useUnifiedTopology', true)मुझे अभी भी चेतावनी मिलती है।
लुइस ग्रैलेट

2
चेतावनी अभी भी
5.6.13 के उन्नयन के

1
मैं उस त्रुटि को देशी MongoDB ड्राइवर का उपयोग कर रहा हूँ!
अखिल

यहाँ हमारे पास सभी पदावनत विकल्प हैं: mongoosejs.com/docs/deprecations.html
मुर्तज़ा अहमद

28

MongoDB में, उन्होंने वर्तमान सर्वर और इंजन मॉनिटरिंग पैकेज को हटा दिया, इसलिए आपको नए सर्वर और इंजन निगरानी पैकेज का उपयोग करने की आवश्यकता है। तो आप बस इस्तेमाल करें

{useUnifiedTopology: true}

mongoose.connect("paste db link", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });

13
यदि आप मेरे प्रश्न को पढ़ते हैं, तो मैंने वहां उल्लेख किया है कि मैंने useUnifiedTopology: trueअपने विन्यास में जोड़ा है और यह अभी भी मुझे चेतावनी दिखाता है
iLiA

5
मुझे यह समस्या थी और मैं भी जोड़ता हूं useUnifiedTopology: trueलेकिन अभी भी कंसोल पर एक ही संदेश आ रहा है।
आरएसए

7
संदेश प्राप्त करने वाले किसी के लिए भी, mongoose.set('useUnifiedTopology', true)mongoose.connect से पहले कॉल करने का प्रयास करें ।
dev4life

हां, यह सही जवाब है। आपको बस "useUnifiedTopology: true, useNewUrlParser: true" को एक जोड़ी {}} के अंदर रखना होगा। मैंने हालांकि "useCreateIndex: true" का उपयोग नहीं किया, लेकिन यह मुझे कुछ विचार देता है। dev4life का तरीका भी काम करता है।
विलियम होउ

mongoose .connect ("db con url", {useUnifiedTopology: true, useNewUrlParser: true,}) .then (() => कंसोल .log ('MongoDB एक्सटेंशन'!)) .catch (ग़लती => {ग़लती => कंसोल) .log (ग़लती से)}) यह मेरे लिए काम कर रहा है
Sanket Sonavane

9

इससे मेरी समस्या हल हो गई।

 const url = 'mongodb://localhost:27017';

 const client = new MongoClient(url, {useUnifiedTopology: true});

उत्तर के लिए धन्यवाद, लेकिन यह सवाल है, और मैं mongoclient का उपयोग नहीं कर रहा हूँ
iLiA

4
@iLiA आपका स्वागत है। हाँ मैं जानता हूँ। लेकिन यह उत्तर किसी के लिए मदद का हो सकता है, क्योंकि मैंने आपके प्रश्न को शीर्षक विषय के द्वारा और सामग्री द्वारा नहीं पाया (और आपके प्रश्न की सामग्री MongoClient के बारे में सामान्य जानकारी के बहुत करीब है)
йрий Светлов

3

यू कैन ट्राई एसिंक्स वेट

const connectDB = async () => {
    try {
        await mongoose.connect(<database url>, {
            useNewUrlParser: true,
            useCreateIndex: true,
            useUnifiedTopology: true,
            useFindAndModify: false
        });
        console.log("MongoDB Conected")
    } catch (err) {
        console.error(err.message);
        process.exit(1);
    }
};


{UseUnifiedTopology: true} का उपयोग करें
Niran Yousuf

3

उस त्रुटि से बचने के लिए निम्न कोड का उपयोग करें

MongoClient.connect(connectionString, {useNewUrlParser: true, useUnifiedTopology: true});

2
mongoose.connect('mongodb://localhost:27017/Tododb', { useNewUrlParser: true, useUnifiedTopology: true });

निम्नलिखित त्रुटियों को दूर करेगा: -

(नोड: 7481) पदावनत: वर्तमान URL स्ट्रिंग पार्सर को हटा दिया गया है, और भविष्य के संस्करण में हटा दिया जाएगा। नए पार्सर का उपयोग करने के लिए, MongoClient.connect को {{NNUUrlParser: true} विकल्प पास करें।

(नोड: 7481) DeprecationWarning: वर्तमान सर्वर डिस्कवरी और मॉनिटरिंग इंजन को हटा दिया गया है, और भविष्य के संस्करण में हटा दिया जाएगा। नए सर्वर डिस्कवर और मॉनिटरिंग इंजन का उपयोग करने के लिए, MongoClient कंस्ट्रक्टर के लिए विकल्प {useUnifiedTopology: true} पास करें।


3
यह भी सुनिश्चित करें कि useUnifiedTopology: trueसभी निर्भरताएं जो mongoDB का उपयोग करती हैं, मेरे मामले में मैं उपयोग कर wiston-mongodbरहा था, मुझे इसे विकल्प में भी जोड़ना था winston.add(new winston.transports.MongoDB({ db: config.get('db'), options: { useUnifiedTopology: true } }));
Gael Musikingala

@GaelMusikingala यह मेरी समस्या थी। उस ओर इशारा करने के लिए धन्यवाद
akmalhakimi1991

@GaelMusikingala, मेरी जान बचाने के लिए धन्यवाद। ❤️
Mr.

2

UseUnifiedTopology विकल्प जोड़ें और इसे सही पर सेट करें ।

अन्य 3 कॉन्फ़िगरेशन को सेट करें mongoose.connect विकल्प जो अन्य शेष DeprecationWarning से निपटेंगे ।

यह विन्यास मेरे लिए काम करता है!

const url = 'mongodb://localhost:27017/db_name';
mongoose.connect(
    url, 
    { 
        useNewUrlParser: true, 
        useUnifiedTopology: true,
        useCreateIndex: true,
        useFindAndModify: false
    }
)

इससे 4 डेप्रिवेशन वियरिंग का समाधान होगा ।

  1. वर्तमान URL स्ट्रिंग पार्सर को हटा दिया गया है, और भविष्य के संस्करण में हटा दिया जाएगा। नए पार्सर का उपयोग करने के लिए, MongoClient.connect को {{NNUUrlParser: true} विकल्प पास करें।
  2. वर्तमान सर्वर डिस्कवरी और निगरानी इंजन को हटा दिया गया है, और भविष्य के संस्करण में हटा दिया जाएगा। नए सर्वर डिस्कवर और मॉनिटरिंग इंजन का उपयोग करने के लिए, MongoClient कंस्ट्रक्टर के लिए विकल्प {useUnifiedTopology: true} पास करें।
  3. Collection.ensureIndex पदावनत है। इसके बजाय createIndexes का उपयोग करें।
  4. DeprecationWarning: Mongoose: findOneAndUpdate()और झूठे के findOneAndDelete()लिए useFindAndModifyविकल्प के बिना पदावनत किया जाता है। देखें: https://mongoosejs.com/docs/deprecations.html#-findandmodify-

आशा है कि इससे सहायता मिलेगी।


1
const mongoose = require("mongoose");

mongoose.connect('mongodb://localhost:27017/Edureka',{ useNewUrlParser: true, useUnifiedTopology: true }, (error)=> {
    const connectionStatus = !error ? 'Success': 'Error Connecting to database';
    console.log(connectionStatus);
});

1

यदि आपके कोड में किसी कारण से क्रोनएनेटियन शामिल है (मेरे मामले में मैं GridFsStorage का उपयोग कर रहा हूं), तो अपने कोड में निम्नलिखित जोड़ने का प्रयास करें:

    options: {
        useUnifiedTopology: true,
    }

फ़ाइल के बाद, इस तरह:

    const storage = new GridFsStorage({
    url: mongodbUrl,
    file: (req, file) => {
        return new Promise((resolve, reject) => {
            crypto.randomBytes(16, (err, buf) => {
                if (err) {
                    return reject(err);
                }
                const filename = buf.toString('hex') + path.extname(file.originalname);
                const fileInfo = {
                    filename: filename,
                    bucketName: 'uploads'
                };
                resolve(fileInfo);
            });
        });
    },
    options: {
        useUnifiedTopology: true,
    }
})

यदि आपका मामला मेरा जैसा दिखता है, तो यह निश्चित रूप से आपके मुद्दे को हल करेगा। सादर


0

मैं भी इसी मुद्दे का सामना कर रहा था:

  1. मैंने टर्मिनल पर निम्नलिखित रन करके mongoDB से जुड़ा होना सुनिश्चित किया:

    brew services start mongodb-community@4.2
    

    और मुझे आउटपुट मिला:

    Successfully started `mongodb-community`
    


Https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ या https://www.youtube.com/watch?v=IGIcrMTtjoU पर मोंगोडब स्थापित करने के निर्देश

  1. मेरा विन्यास इस प्रकार था:

    mongoose.connect(config.mongo_uri, {
        useUnifiedTopology: true,
        useNewUrlParser: true})
        .then(() => console.log("Connected to Database"))
        .catch(err => console.error("An error has occured", err));
    

जिससे मेरी समस्या हल हो गई!


0
   const mongo = require('mongodb').MongoClient;

   mongo.connect(process.env.DATABASE,{useUnifiedTopology: true, 
   useNewUrlParser: true}, (err, db) => {
      if(err) {
    console.log('Database error: ' + err);
   } else {
    console.log('Successful database connection');
      auth(app, db)
      routes(app, db)

   app.listen(process.env.PORT || 3000, () => {
      console.log("Listening on port " + process.env.PORT);
    });  

}});


0

मैंगोज सेट कनेक्ट यूटाइंडटाइपोलॉजी: सही विकल्प

  import mongoose from 'mongoose';

        const server = '127.0.0.1:27017'; // REPLACE WITH YOUR DB SERVER
        const database = 'DBName'; // REPLACE WITH YOUR DB NAME
        class Database {
          constructor() {
            this._connect();
          }
          _connect() {
            mongoose.Promise = global.Promise;
            // * Local DB SERVER *
            mongoose
              .connect(`mongodb://${server}/${database}`, {
                useNewUrlParser: true,
                useCreateIndex: true,
                useUnifiedTopology: true
              })
              .then(
                () => console.log(`mongoose version: ${mongoose.version}`),
                console.log('Database connection successful'),
              )
              .catch(err => console.error('Database connection error', err));   
          }
        }
        module.exports = new Database();

0

इसने मेरे लिए काम किया

इसका उपयोग MongoClientकरने वाले लोगों के लिए :

MongoClient.connect(connectionurl, 
  {useUnifiedTopology: true, useNewUrlParser: true},  callback() {

आम के लिए:

mongoose.connect(connectionurl, 
         {useUnifiedTopology: true, useNewUrlParser: true}).then(()=>{

अन्य कनेक्शन निकालें


1
मैंने स्वीकार किया कि मैं
iLiA

0

मैं इस सूत्र में जोड़ना चाहता हूं कि इसे अन्य निर्भरताओं के साथ भी करना पड़ सकता है।

उदाहरण के लिए, मैंने NodeJS, MongoDB या Mongoose के लिए कुछ भी अद्यतन या सेट नहीं किया था, हालांकि समस्या थी - हालांकि - connect-mongodb-sessionअपडेट किया गया था और उसी त्रुटि को स्लिंग करना शुरू किया था। इस मामले में, समाधान केवल संस्करण connect-mongodb-sessionसे संस्करण में रोलबैक 2.3.0करना था 2.2.0

यहां छवि विवरण दर्ज करें


0

मैं हर बार एक ही पॉप अप त्रुटियों था और यह मेरे लिए काम किया

mongoose.connect("mongodb://localhost:27017/${yourDB}", {
    useNewUrlParser: true,
    useUnifiedTopology: true

}, function (err) {
    if (err) {
        console.log(err)
    } else {
        console.log("Database connection successful")
    }
});

0

इस लाइन का उपयोग करें, यह मेरे लिए काम किया

mongoose.set('useUnifiedTopology', true);

1
जब संभव हो, तो कृपया केवल कोड के बजाय अतिरिक्त स्पष्टीकरण प्रदान करने का प्रयास करें। ऐसे उत्तर अधिक उपयोगी होते हैं क्योंकि वे समुदाय के सदस्यों की मदद करते हैं और विशेष रूप से नए डेवलपर्स समाधान के तर्क को बेहतर ढंग से समझते हैं, और अनुवर्ती प्रश्नों को संबोधित करने की आवश्यकता को रोकने में मदद कर सकते हैं।
राजन

0

यदि आप एक MongoDB सर्वर का उपयोग कर रहे हैं, तो कनेक्ट करने और URL को खोजने के लिए क्लस्टर घड़ी में कनेक्ट करने के बाद, URL कुछ इस तरह से बदल जाएगा

<mongodb+srv://Rohan:<password>@cluster0-3kcv6.mongodb.net/<dbname>?retryWrites=true&w=majority>

इस स्थिति में, पासवर्ड को अपने डेटाबेस पासवर्ड और डीबी नाम से बदलना न भूलें और फिर उपयोग करें

const client = new MongoClient(url,{useUnifiedTopology:true});

0
mongoose.connect("DBURL", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true },(err)=>{
    if(!err){
         console.log('MongoDB connection sucess');
        }
    else{ 
        console.log('connection not established :' + JSON.stringify(err,undefined,2));
    }
});

जब संभव हो, तो कृपया केवल कोड के बजाय अतिरिक्त स्पष्टीकरण प्रदान करने का प्रयास करें। ऐसे उत्तर अधिक उपयोगी होते हैं क्योंकि वे समुदाय के सदस्यों की मदद करते हैं और विशेष रूप से नए डेवलपर्स समाधान के तर्क को बेहतर ढंग से समझते हैं, और अनुवर्ती प्रश्नों को संबोधित करने की आवश्यकता को रोकने में मदद कर सकते हैं।
राजन

0

यह सरल है, आपके द्वारा उपयोग किए गए कोड को हटा दें और नीचे दिए गए कोड का उपयोग करें:

const url = 'mongodb://localhost:27017';
var dbConn = mongodb.MongoClient.connect(url, {useUnifiedTopology: true});

0

यदि आपने टाइप किया है तो MongoOptions में config जोड़ें

const MongoOptions: MongoClientOptions = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
};

      const client = await MongoClient.connect(url, MongoOptions);

if you not used typescript  
const MongoOptions= {
  useNewUrlParser: true,
  useUnifiedTopology: true,
};

0

अपने मोंगॉड कमांड को चलाना और सर्वर को चालू रखना महत्वपूर्ण है। यदि नहीं, तो आप अभी भी इस त्रुटि को देख रहे हैं।

मैं आपको अपना कोड देता हूं:

const mongodb = require('mongodb')
const MongoClient = mongodb.MongoClient

const connectionURL = 'mongodb://127.0.0.1:27017'
const databaseName = 'task-manager'

MongoClient.connect(connectionURL, {useNewUrlParser: true, useUnifiedTopology: true}, (error, client) => {
    if(error) {
        return console.log('Error connecting to the server.')
    }

    console.log('Succesfully connected.')
})


0

यह काम करेगा:

// Connect to Mongo
mongoose.set("useNewUrlParser", true);
mongoose.set("useUnifiedTopology", true);

mongoose
  .connect(db) // Connection String here
  .then(() => console.log("MongoDB Connected..."))
  .catch(() => console.log(err));

0
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

ऊपरी 2 लाइन को काटें फिर बस उस पंक्ति को बदलें

const client = new MongoClient(url, { useUnifiedTopology: true });

0

यह मेरे लिए ठीक काम करता है, और कोई त्रुटि नहीं।

mongoose
.connect(URL_of_mongodb, {
useUnifiedTopology: true,
useNewUrlParser: true,
})
.then(() => console.log('DB Connected!'))
.catch(err => {
console.log(`DB Connection Error: ${err}`);
});

कृपया अपने उत्तर में कुछ स्पष्टीकरण जोड़ें! इसके अलावा, यह जांचना न भूलें: मैं एक अच्छा उत्तर कैसे लिखूं?
प्रथमेश कोष्टी

0

मोंगो के लिए काम कर रहे नमूना कोड, संदर्भ लिंक

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url,{ useUnifiedTopology: true }, function(err, db) {
  if (err) throw err;
  var dbo = db.db("mydb");
  dbo.createCollection("customers", function(err, res) {
    if (err) throw err;
    console.log("Collection created!");
    db.close();
  });
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.