Mesin Penemuan dan Pemantauan Server tidak lagi digunakan

96

Saya menggunakan Mongoose dengan aplikasi Node.js saya dan ini adalah konfigurasi saya:

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

tapi di konsol itu masih memberi saya peringatan:

DeprecationWarning: Mesin Penemuan dan Pemantauan Server saat ini tidak digunakan lagi, dan akan dihapus di versi mendatang. Untuk menggunakan mesin Server Discover and Monitoring yang baru, teruskan opsi {useUnifiedTopology: true} ke konstruktor MongoClient.

Apa masalahnya? Saya tidak menggunakan useUnifiedTopologysebelumnya tetapi sekarang muncul di konsol. Saya menambahkannya ke konfigurasi tetapi masih memberi saya peringatan ini, mengapa? Saya bahkan tidak menggunakan MongoClient.

Edit

Saat Felipe Plets menjawab, ada masalah di Mongoose dan mereka memperbaiki bug ini di versi yang lebih baru. Jadi Anda bisa mengatasi masalah dengan memperbarui versi luwak.

iLiA
sumber

Jawaban:

170

Memperbarui

Mongoose 5.7.1 telah dirilis dan tampaknya memperbaiki masalah tersebut, jadi menyiapkan useUnifiedTopologyopsi berfungsi seperti yang diharapkan.

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

Jawaban asli

Saya menghadapi masalah yang sama dan memutuskan untuk mendalami kode Mongoose: https://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology

Tampaknya menjadi opsi yang ditambahkan pada versi 5.7 dari Mongoose dan belum terdokumentasi dengan baik. Saya bahkan tidak dapat menemukannya disebutkan dalam riwayat perpustakaan https://github.com/Automattic/mongoose/blob/master/History.md

Menurut komentar di kode:

  • @param {Boolean} [options.useUnifiedTopology = false] False secara default. Setel ke trueuntuk ikut serta ke set replika driver MongoDB dan mesin pemantauan cluster yang dipisahkan.

Ada juga masalah pada proyek GitHub tentang kesalahan ini: https://github.com/Automattic/mongoose/issues/8156

Dalam kasus saya, saya tidak menggunakan Mongoose dalam set replika atau cluster sharded dan meskipun opsinya harus salah. Tetapi jika salah maka pengaturan yang dikeluhkan harus benar. Setelah benar, itu masih tidak berfungsi, mungkin karena database saya tidak berjalan pada kumpulan replika atau cluster yang dipecah.

Saya telah menurunkan versi ke 5.6.13 dan proyek saya kembali berfungsi dengan baik. Jadi satu-satunya opsi yang saya lihat untuk saat ini adalah menurunkannya dan menunggu perbaikan untuk memperbarui versi yang lebih baru.

Felipe Plets
sumber
Saya pikir sama (versi downgrade), saya menggunakan cluster mlab jadi mungkin alasan mengapa peringatan tidak hilang?
iLiA
2
ada bug di luwak terbaru 5.7.7jika Anda menggunakan, createConnection()bukan connect(), seperti mongoose.createConnection(conString, { useUnifiedTopology: true }). useUnifiedTopologytidak akan dipertimbangkan dan Anda masih akan mendapatkan peringatan. acara dengan mongoose.set('useUnifiedTopology', true)saya masih mendapatkan peringatan.
Louis Grellet
2
Peringatan masih tetap ada setelah menurunkan versi ke 5.6.13
O'Dane Brissett
1
Saya mendapatkan kesalahan itu menggunakan driver MongoDB asli!
Akhila
Di sini kami memiliki semua opsi yang tidak berlaku lagi: mongoosejs.com/docs/deprecations.html
Murtaza Ahmad
27

Di mongoDB, mereka menghentikan server saat ini dan paket pemantauan mesin, jadi Anda perlu menggunakan server baru dan paket pemantauan mesin. Jadi gunakan saja

{useUnifiedTopology: true}

mongoose.connect("paste db link", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });
tamilselvan s
sumber
11
jika Anda membaca pertanyaan saya, saya sebutkan di sana bahwa saya menambahkan useUnifiedTopology: truedalam konfigurasi saya dan masih menunjukkan peringatan kepada saya
iLiA
4
Saya memiliki masalah ini dan saya juga menambahkan useUnifiedTopology: truetetapi pesan yang sama masih datang di konsol.
RSA
6
Bagi siapa pun yang masih menerima pesan tersebut, coba menelepon mongoose.set('useUnifiedTopology', true)sebelum mongoose.connect.
dev4life
Ya, inilah jawaban yang benar. Anda hanya perlu meletakkan "useUnifiedTopology: true, useNewUrlParser: true" bersama-sama di dalam sepasang {}. Saya tidak menggunakan "useCreateIndex: true", tapi memberi saya beberapa ide. Cara dev4life juga berhasil.
William Hou
mongoose .connect ("db conn url", {useUnifiedTopology: true, useNewUrlParser: true,}). lalu (() => console.log ('MongoDB Connected!')) .catch (err => {err => console .log (err)}) inilah yang berhasil untuk saya
Sanket Sonavane
9

Ini memecahkan masalah saya.

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

 const client = new MongoClient(url, {useUnifiedTopology: true});
Юрий Светлов
sumber
terima kasih atas jawabannya, tapi ini pertanyaan luwak, dan saya tidak menggunakan mongoclient
iLiA
3
@iLiA Sama-sama. Ya saya tahu. Tetapi jawaban ini mungkin bisa membantu seseorang, karena saya menemukan pertanyaan Anda persis berdasarkan topik judul dan bukan berdasarkan konten (dan konten pertanyaan Anda sangat dekat dengan informasi umum tentang MongoClient)
Юрий Светлов
3

Anda Bisa Mencoba async menunggu

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

Niran Yousuf
sumber
Gunakan {useUnifiedTopology: true}
Niran Yousuf
3

Gunakan kode berikut untuk menghindari kesalahan itu

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

Akan menghapus kesalahan berikut: -

(node: 7481) DeprecationWarning: parser string URL saat ini tidak digunakan lagi, dan akan dihapus pada versi mendatang. Untuk menggunakan parser baru, teruskan opsi {useNewUrlParser: true} ke MongoClient.connect.

(node: 7481) DeprecationWarning: mesin Penemuan dan Pemantauan Server saat ini tidak digunakan lagi, dan akan dihapus di versi mendatang. Untuk menggunakan mesin Server Discover and Monitoring yang baru, teruskan opsi {useUnifiedTopology: true} ke konstruktor MongoClient.

Hassan Ali Shahzad
sumber
3
Juga pastikan untuk menambahkan useUnifiedTopology: trueke semua dependensi yang menggunakan mongoDB, dalam kasus saya, saya menggunakan, wiston-mongodbsaya juga harus menambahkannya di opsi winston.add(new winston.transports.MongoDB({ db: config.get('db'), options: { useUnifiedTopology: true } }));
Gael Musikingala
@GaelMusikingala ini adalah masalah saya. Terima kasih telah menunjukkan hal itu
akmalhakimi1991
@GaelMusikingala, Terima kasih telah menyelamatkan hidup saya. ❤️ 👏
Mr. spShuvo
@ Mr.spShuvo tolong beri suara positif
Hassan Ali Shahzad
2

Tambahkan opsi useUnifiedTopology dan setel ke true .

Setel 3 konfigurasi lain dari opsi mongoose.connect yang akan menangani DeprecationWarning lainnya yang tersisa .

Konfigurasi ini berfungsi untuk saya!

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

Ini akan menyelesaikan 4 DeprecationWarning .

  1. Pengurai string URL saat ini tidak digunakan lagi, dan akan dihapus pada versi mendatang. Untuk menggunakan parser baru, teruskan opsi {useNewUrlParser: true} ke MongoClient.connect.
  2. Mesin Penemuan dan Pemantauan Server saat ini tidak digunakan lagi, dan akan dihapus pada versi mendatang. Untuk menggunakan mesin Server Discover and Monitoring yang baru, teruskan opsi {useUnifiedTopology: true} ke konstruktor MongoClient.
  3. Collection.ensureIndex tidak digunakan lagi. Gunakan createIndexes sebagai gantinya.
  4. DeprecationWarning: Mongoose: findOneAndUpdate()dan findOneAndDelete()tanpa useFindAndModifyopsi yang disetel ke false tidak digunakan lagi. Lihat: https://mongoosejs.com/docs/deprecations.html#-findandmodify- .

Semoga membantu.

Richard Vergis
sumber
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);
});
Alok Srivastav
sumber
1

Jika kode Anda menyertakan createConnetion karena alasan tertentu (Dalam kasus saya, saya menggunakan GridFsStorage), coba tambahkan yang berikut ini ke kode Anda:

    options: {
        useUnifiedTopology: true,
    }

setelah file, seperti ini:

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

Jika kasus Anda terlihat seperti kasus saya, ini pasti akan menyelesaikan masalah Anda. Salam

mohamad b
sumber
0

Saya juga menghadapi masalah yang sama:

  1. Saya memastikan untuk terhubung ke mongoDB dengan menjalankan yang berikut di terminal:

    brew services start mongodb-community@4.2
    

    Dan saya mendapatkan hasilnya:

    Successfully started `mongodb-community`
    

Petunjuk untuk memasang mongodb di
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ atau https://www.youtube.com/watch?v=IGIcrMTtjoU

  1. Konfigurasi saya adalah sebagai berikut:

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

Yang memecahkan masalah saya!

Miguel Chiau
sumber
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);
    });  

}});

StarDrop9
sumber
0

Pengaturan mongoose connect useUnifiedTopology: opsi benar

  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();
Sanjay kumar
sumber
0

Saya ingin menambahkan ke utas ini yang mungkin juga ada hubungannya dengan dependensi lain.

Misalnya, tidak ada yang saya perbarui atau atur untuk NodeJS, MongoDB atau Mongoose yang menjadi masalah - namun - connect-mongodb-sessiontelah diperbarui dan mulai melakukan kesalahan yang sama. Solusinya, dalam hal ini, cukup dengan mengembalikan versi connect-mongodb-sessiondari versi 2.3.0ke 2.2.0.

masukkan deskripsi gambar di sini

Steven Ventimiglia
sumber
0

saya memiliki kesalahan yang sama muncul setiap kali dan ini berhasil untuk saya

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

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

gunakan baris ini, ini berhasil untuk saya

mongoose.set('useUnifiedTopology', true);
Sunil Sahu
sumber
1
Jika memungkinkan, berikan penjelasan tambahan, bukan hanya kode. Jawaban semacam itu cenderung lebih berguna karena membantu anggota komunitas dan terutama pengembang baru lebih memahami alasan solusi, dan dapat membantu mencegah kebutuhan untuk menjawab pertanyaan lanjutan.
Rajan
0

Jika Anda menggunakan server MongoDB maka setelah menggunakan terhubung di jam cluster saat terhubung dan menemukan URL, URL akan menjadi seperti ini

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

Dalam hal ini, jangan lupa untuk mengganti kata sandi dengan kata sandi database dan nama db Anda lalu gunakan

const client = new MongoClient(url,{useUnifiedTopology:true});
Rohan Devaki
sumber
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));
    }
});
kiran r
sumber
Jika memungkinkan, berikan penjelasan tambahan, bukan hanya kode. Jawaban semacam itu cenderung lebih berguna karena membantu anggota komunitas dan terutama pengembang baru lebih memahami alasan solusi, dan dapat membantu mencegah kebutuhan untuk menjawab pertanyaan lanjutan.
Rajan
0

Caranya sederhana, hapus kode yang telah Anda gunakan dan gunakan kode di bawah ini:

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

jika Anda menggunakan skrip, tambahkan konfigurasi ke MongoOptions

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,
};
Mohammed_Alreai
sumber
0

Penting untuk menjalankan perintah mongod Anda dan menjaga server tetap berjalan. Jika tidak, Anda masih akan melihat kesalahan ini.

Saya melampirkan kode saya:

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

pemegang lisensi
sumber
0

Ini akan berhasil:

// 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));
Chamon Roy
sumber
-1

Ini berhasil untuk saya

Untuk orang-orang yang menggunakan MongoClientcoba ini:

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

Untuk luwak:

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

Hapus connectionOptions lainnya

shetkar vinayak
sumber
1
Saya mengakui bahwa saya tidak menggunakan mongoClient
iLiA