Die Server Discovery and Monitoring Engine ist veraltet


96

Ich verwende Mongoose mit meiner Node.js-App und dies ist meine Konfiguration:

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)
})

aber in der Konsole gibt es mir immer noch die Warnung:

DeprecationWarning: Die aktuelle Server Discovery and Monitoring Engine ist veraltet und wird in einer zukünftigen Version entfernt. Übergeben Sie die Option {useUnifiedTopology: true} an den MongoClient-Konstruktor, um die neue Server Discover and Monitoring-Engine zu verwenden.

Worin besteht das Problem? Ich habe es useUnifiedTopologyvorher nicht benutzt, aber jetzt wird es in der Konsole angezeigt. Ich habe es der Konfiguration hinzugefügt, aber es gibt mir immer noch diese Warnung, warum? Ich benutze nicht einmal MongoClient.

Bearbeiten

Als Felipe Plets antwortete, gab es ein Problem in Mongoose und sie haben diesen Fehler in späteren Versionen behoben. Sie können das Problem also lösen, indem Sie die Mungo-Version aktualisieren.

Antworten:


170

Aktualisieren

Mongoose 5.7.1 wurde veröffentlicht und scheint das Problem zu beheben. Das Einrichten der useUnifiedTopologyOption funktioniert also wie erwartet.

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

Ursprüngliche Antwort

Ich hatte das gleiche Problem und beschloss, mich eingehend mit Mungo-Code zu befassen: https://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology

Scheint eine Option zu sein, die in Version 5.7 von Mongoose hinzugefügt wurde und noch nicht gut dokumentiert ist. Ich konnte es nicht einmal in der Bibliotheksgeschichte https://github.com/Automattic/mongoose/blob/master/History.md finden

Nach einem Kommentar im Code:

  • @param {Boolean} [options.useUnifiedTopology = false] Standardmäßig False. trueAktivieren Sie diese Option , um sich für das Replikatset des MongoDB-Treibers und die Sharded-Cluster-Überwachungs-Engine zu entscheiden.

Es gibt auch ein Problem im Projekt GitHub bezüglich dieses Fehlers: https://github.com/Automattic/mongoose/issues/8156

In meinem Fall verwende ich Mongoose nicht in einem Replikatsatz oder einem Sharded-Cluster, obwohl die Option falsch sein sollte. Aber wenn falsch, beschwert es sich, sollte die Einstellung wahr sein. Sobald dies zutrifft, funktioniert es immer noch nicht, wahrscheinlich weil meine Datenbank nicht auf einem Replikatsatz oder einem Sharded-Cluster ausgeführt wird.

Ich habe ein Downgrade auf 5.6.13 durchgeführt und mein Projekt funktioniert wieder einwandfrei. Die einzige Option, die ich derzeit sehe, besteht darin, ein Downgrade durchzuführen und darauf zu warten, dass das Update auf eine neuere Version aktualisiert wird.


Ich dachte das gleiche (Downgrade-Version), ich verwende mlab-Cluster. Vielleicht ist der Grund, warum die Warnung nicht verschwindet?
iLiA

2
Es gibt einen Fehler im neuesten Mungo, 5.7.7wenn Sie createConnection()anstelle von connect(), wie verwenden mongoose.createConnection(conString, { useUnifiedTopology: true }). useUnifiedTopologywird nicht berücksichtigt und Sie erhalten trotzdem die Warnung. Ereignis mit mongoose.set('useUnifiedTopology', true)Ich bekomme immer noch die Warnung.
Louis Grellet

2
Nach dem Downgrade auf 5.6.13
O'Dane Brissett

1
Ich erhalte diesen Fehler mit dem nativen MongoDB-Treiber!
Akhila

Hier haben wir alle veralteten Optionen: mongoosejs.com/docs/deprecations.html
Murtaza Ahmad

27

In mongoDB haben sie das aktuelle Server- und Engine-Überwachungspaket veraltet, sodass Sie ein neues Server- und Engine-Überwachungspaket verwenden müssen. Also benutzt du einfach

{useUnifiedTopology: true}

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

11
Wenn Sie meine Frage lesen, habe ich dort erwähnt, dass ich useUnifiedTopology: truein meiner Konfiguration hinzugefügt habe und es zeigt mir immer noch Warnung
iLiA

4
Ich hatte dieses Problem und füge hinzu, useUnifiedTopology: trueaber es kommt immer noch die gleiche Meldung auf der Konsole.
RSA

6
Wenn die Nachricht weiterhin angezeigt wird, rufen Sie mongoose.set('useUnifiedTopology', true)vor mongoose.connect an.
Dev4life

Ja, das ist die richtige Antwort. Sie müssen nur "useUnifiedTopology: true, useNewUrlParser: true" in einem Paar von {} zusammenfügen. Ich habe zwar nicht "useCreateIndex: true" verwendet, aber es gibt mir eine Idee. Der Weg von dev4life funktioniert auch.
William Hou

mongoose .connect ("db conn url", {useUnifiedTopology: true, useNewUrlParser: true,}) .then (() => console.log ('MongoDB Connected!')) .catch (err => {err => console .log (err)}) das hat bei mir funktioniert
Sanket Sonavane

9

Dies löste mein Problem.

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

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

danke für die antwort, aber das ist mungo
frage

3
@iLiA Gern geschehen. Ja, ich weiß. Aber diese Antwort kann jemandem helfen, da ich Ihre Frage genau nach Titelthema und nicht nach Inhalt gefunden habe (und der Inhalt Ihrer Frage sehr nahe an allgemeinen Informationen über MongoClient liegt)
Юрий Светлов

3

Sie können versuchen, asynchron zu warten

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);
    }
};


Verwenden Sie {useUnifiedTopology: true}
Niran Yousuf

3

Verwenden Sie den folgenden Code, um diesen Fehler zu vermeiden

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

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

Entfernt folgende Fehler: -

(Knoten: 7481) DeprecationWarning: Der aktuelle URL-String-Parser ist veraltet und wird in einer zukünftigen Version entfernt. Um den neuen Parser zu verwenden, übergeben Sie die Option {useNewUrlParser: true} an MongoClient.connect.

(Knoten: 7481) DeprecationWarning: Die aktuelle Server Discovery and Monitoring-Engine ist veraltet und wird in einer zukünftigen Version entfernt. Übergeben Sie die Option {useUnifiedTopology: true} an den MongoClient-Konstruktor, um die neue Server Discover and Monitoring-Engine zu verwenden.


3
useUnifiedTopology: trueStellen Sie außerdem sicher, dass Sie alle Abhängigkeiten hinzufügen , die mongoDB verwenden. In meinem Fall musste ich wiston-mongodbes auch in der Option hinzufügen winston.add(new winston.transports.MongoDB({ db: config.get('db'), options: { useUnifiedTopology: true } }));
Gael Musikingala

@GaelMusikingala das war mein problem. Vielen Dank für den Hinweis
akmalhakimi1991

@GaelMusikingala, Danke, dass du mein Leben gerettet hast. ❤️ 👏
Mr.spShuvo

@ Mr.spShuvo bitte positiv bewerten
Hassan Ali Shahzad

2

Fügen Sie die Option useUnifiedTopology hinzu und setzen Sie sie auf true .

Stellen Sie andere 3 Konfigurationen der Optionen mongoose.connect ein , die sich mit anderen verbleibenden DeprecationWarning befassen .

Diese Konfiguration funktioniert bei mir!

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

Dies löst 4 DeprecationWarning .

  1. Der aktuelle URL-String-Parser ist veraltet und wird in einer zukünftigen Version entfernt. Um den neuen Parser zu verwenden, übergeben Sie die Option {useNewUrlParser: true} an MongoClient.connect.
  2. Das aktuelle Servererkennungs- und -überwachungsmodul ist veraltet und wird in einer zukünftigen Version entfernt. Übergeben Sie die Option {useUnifiedTopology: true} an den MongoClient-Konstruktor, um die neue Server Discover and Monitoring-Engine zu verwenden.
  3. Collection.ensureIndex ist veraltet. Verwenden Sie stattdessen createIndexes.
  4. DeprecationWarning: Mongoose: findOneAndUpdate()und findOneAndDelete()ohne die useFindAndModifyOption false sind veraltet. Siehe: https://mongoosejs.com/docs/deprecations.html#-findandmodify- .

Ich hoffe es hilft.


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

Wenn Ihr Code aus irgendeinem Grund createConnetion enthält (in meinem Fall verwende ich GridFsStorage), fügen Sie Ihrem Code Folgendes hinzu:

    options: {
        useUnifiedTopology: true,
    }

direkt nach der Datei, wie folgt:

    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,
    }
})

Wenn Ihr Fall wie meiner aussieht, wird dies Ihr Problem sicherlich lösen. Grüße


0

Ich stand auch vor dem gleichen Problem:

  1. Ich habe sichergestellt, dass ich mit mongoDB verbunden bin, indem ich Folgendes auf dem Terminal ausgeführt habe:

    brew services start mongodb-community@4.2
    

    Und ich habe die Ausgabe bekommen:

    Successfully started `mongodb-community`
    

Anweisungen zur Installation von mongodb finden Sie unter
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ oder https://www.youtube.com/watch?v=IGIcrMTtjoU

  1. Meine Konfiguration war wie folgt:

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

Welches hat mein Problem gelöst!


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

Festlegen der Mungo-Verbindung useUnifiedTopology: true- Option

  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

Ich möchte diesem Thread hinzufügen, dass er möglicherweise auch mit anderen Abhängigkeiten zu tun hat.

Zum Beispiel wurde nichts, was ich für NodeJS, MongoDB oder Mongoose aktualisiert oder festgelegt connect-mongodb-sessionhabe, aktualisiert. Es wurde jedoch derselbe Fehler ausgelöst . In diesem Fall bestand die Lösung darin, die Version von connect-mongodb-sessionvon Version 2.3.0auf einfach zurückzusetzen 2.2.0.

Geben Sie hier die Bildbeschreibung ein


0

Ich hatte jedes Mal die gleichen Fehler und das hat bei mir funktioniert

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

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

0

Verwenden Sie diese Linie, das hat bei mir funktioniert

mongoose.set('useUnifiedTopology', true);

1
Wenn möglich, bemühen Sie sich bitte, zusätzliche Erklärungen anstelle von nur Code bereitzustellen. Solche Antworten sind in der Regel nützlicher, da sie Mitgliedern der Community und insbesondere neuen Entwicklern helfen, die Gründe für die Lösung besser zu verstehen, und dazu beitragen können, dass keine weiteren Fragen beantwortet werden müssen.
Rajan

0

Wenn Sie einen MongoDB-Server verwenden, sieht die URL nach der Verwendung von connect in der Clusteruhr beim Verbinden und Suchen der URL ungefähr so ​​aus

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

Vergessen Sie in diesem Fall nicht, das Kennwort durch Ihr Datenbankkennwort und den Datenbanknamen zu ersetzen und dann zu verwenden

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));
    }
});

Wenn möglich, bemühen Sie sich bitte, zusätzliche Erklärungen anstelle von nur Code bereitzustellen. Solche Antworten sind in der Regel nützlicher, da sie Mitgliedern der Community und insbesondere neuen Entwicklern helfen, die Gründe für die Lösung besser zu verstehen, und dazu beitragen können, dass keine weiteren Fragen beantwortet werden müssen.
Rajan

0

Entfernen Sie einfach den von Ihnen verwendeten Code und verwenden Sie den folgenden Code:

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

0

Wenn Sie Typoskript verwendet haben, fügen Sie den MongoOptions eine Konfiguration hinzu

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

Es ist wichtig, dass Sie Ihren Mongod-Befehl ausführen und den Server am Laufen halten. Wenn nicht, wird dieser Fehler weiterhin angezeigt.

Ich hänge dir meinen Code an:

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

Das wird funktionieren:

// 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));

-1

Das hat bei mir funktioniert

Für Leute, die MongoClientFolgendes verwenden:

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

Für Mungo:

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

Entfernen Sie andere connectionOptions


1
Ich gab zu, dass ich mongoClient nicht benutze
iLiA
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.