Sunucu Keşif ve İzleme motoru kullanımdan kaldırıldı


96

Mongoose'u Node.js uygulamamla kullanıyorum ve bu benim yapılandırmam:

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

ancak konsolda bana hala uyarı veriyor:

Kullanımdan Kaldırılma Uyarısı: mevcut Sunucu Keşfi ve İzleme motoru kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacaktır. Yeni Sunucu Bulma ve İzleme motorunu kullanmak için, MongoClient yapıcısına {useUnifiedTopology: true} seçeneğini iletin.

Sorun nedir? Daha useUnifiedTopologyönce kullanmıyordum ama şimdi konsolda görünüyor. Yapılandırmaya ekledim ama yine de bu uyarıyı veriyor, neden? Ben kullanmıyorum bile MongoClient.

Düzenle

Felipe Plets'in cevapladığı gibi, Mongoose'da bir sorun vardı ve bu hatayı sonraki sürümlerde düzelttiler. Böylelikle firavun faresi sürümünü güncelleyerek sorunu çözebilirsiniz.

Yanıtlar:


170

Güncelleme

Mongoose 5.7.1 yayınlandı ve sorunu çözüyor gibi görünüyor, bu nedenle useUnifiedTopologyseçeneği ayarlamak beklendiği gibi çalışıyor.

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

Orijinal cevap

Aynı sorunla karşı karşıyaydım ve Mongoose kodunu derinlemesine incelemeye karar verdim: https://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology

Mongoose 5.7 sürümüne eklenen bir seçenek gibi görünüyor ve henüz tam olarak belgelenmemiş. Kitaplık geçmişinde bahsedildiğini bile bulamadım https://github.com/Automattic/mongoose/blob/master/History.md

Koddaki bir yoruma göre:

  • @param {Boolean} [options.useUnifiedTopology = false] Varsayılan olarak yanlıştır. Ayarlayın trueMongoDB sürücünün çoğaltma kümesine de opt ve motoru izleme küme kanatlı bir.

GitHub projesinde de bu hatayla ilgili bir sorun var: https://github.com/Automattic/mongoose/issues/8156

Benim durumumda Mongoose'u bir replika kümesinde veya parçalanmış kümede kullanmıyorum ve seçenek yanlış olmalıdır. Ancak yanlışsa, ayar doğru olmalıdır. Bir kez doğruysa, muhtemelen veritabanım bir kopya kümesinde veya parçalanmış kümede çalışmadığı için hala çalışmıyor.

5.6.13'e düşürdüm ve projem tekrar sorunsuz çalışıyor. Bu yüzden şimdilik gördüğüm tek seçenek, onu eski sürüme geçirmek ve düzeltmenin daha yeni bir sürüm için güncellenmesini beklemek.


Ben de aynı şeyi düşündüm (sürüm düşürme), mlab kümeleri kullanıyorum, bu yüzden belki de uyarının kaybolmamasının nedeni budur?
iLiA

2
son firavun faresi bir hata var 5.7.7kullanırsanız createConnection()yerine connect()gibi mongoose.createConnection(conString, { useUnifiedTopology: true }). useUnifiedTopologydikkate alınmayacak ve yine de uyarı alacaksınız. ile olay mongoose.set('useUnifiedTopology', true)hala uyarı alıyorum.
Louis Grellet


1
Yerel MongoDB sürücüsünü kullanarak bu hatayı alıyorum!
Akhila

Burada kullanımdan kaldırılan tüm seçeneklerimiz var: mongoosejs.com/docs/deprecations.html
Murtaza Ahmad

27

MongoDB'de mevcut sunucu ve motor izleme paketini kullanımdan kaldırmışlardır, bu nedenle yeni sunucu ve motor izleme paketini kullanmanız gerekir. Yani sadece kullan

{useUnifiedTopology: true}

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

11
sorumu okursanız, useUnifiedTopology: trueyapılandırmamda eklediğimden bahsetmiştim ve hala beni uyarıyor
iLiA

4
Bu sorunu yaşadım ve ekledim useUnifiedTopology: trueama yine de konsolda aynı mesaj geliyor.
RSA

6
Mesajı hala alan biri için, mongoose.set('useUnifiedTopology', true)mongoose.connect'ten önce aramayı deneyin .
dev4life

Evet, bu doğru cevap. Bir {} çiftinin içine "useUnifiedTopology: true, useNewUrlParser: true" koymanız yeterlidir. Yine de "useCreateIndex: true" kullanmadım, ama bu bana biraz fikir veriyor. dev4life'ın yolu da işe yarıyor.
William Hou

mongoose .connect ("db bağlantı url", {useUnifiedTopology: true, useNewUrlParser: true,}) .then (() => console.log ('MongoDB Bağlı!')) .catch (err => {err => console .log (err)})
işime yarayan buydu

9

Bu benim sorunumu çözdü.

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

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

cevabınız için teşekkürler, ama bu firavun faresi bir soru ve mongoclient kullanmıyorum
iLiA

3
@iLiA Hoş geldiniz. Evet biliyorum. Ancak sorunuzu içerikle değil, tam olarak başlık konusuna göre bulduğum için (ve sorunuzun içeriği MongoClient hakkındaki genel bilgilere çok yakın olduğu için), bu cevap birine yardımcı olabilir
Юрий Светлов

3

Asenkron beklemeyi deneyebilirsiniz

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} 'yi kullanın
Niran Yousuf

3

Bu hatayı önlemek için aşağıdaki kodu kullanın

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

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

Aşağıdaki hataları kaldıracak: -

(düğüm: 7481) Kullanımdan Kaldırma Uyarı: mevcut URL dizesi ayrıştırıcısı kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacak. Yeni ayrıştırıcıyı kullanmak için {useNewUrlParser: true} seçeneğini MongoClient.connect'e geçirin.

(düğüm: 7481) Kullanımdan Kaldırma Uyarısı: mevcut Sunucu Keşfi ve İzleme motoru kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacaktır. Yeni Sunucu Bulma ve İzleme motorunu kullanmak için, MongoClient yapıcısına {useUnifiedTopology: true} seçeneğini iletin.


3
Ayrıca useUnifiedTopology: truemongoDB'yi kullanan tüm bağımlılıkları eklediğinizden emin olun , benim durumumda wiston-mongodbonu da seçeneğe eklemem gerekiyordu winston.add(new winston.transports.MongoDB({ db: config.get('db'), options: { useUnifiedTopology: true } }));
Gael Musikingala

@GaelMusikingala bu benim sorunumdu. Bunu belirttiğiniz için teşekkürler
akmalhakimi1991

@GaelMusikingala, Hayatımı kurtardığın için teşekkürler. ❤️ 👏
Bay spShuvo

@ Bay spShuvo lütfen olumlu oy verin
Hassan Ali Shahzad

2

UseUnifiedTopology seçeneğini ekleyin ve true olarak ayarlayın .

Mongoose.connect seçeneğinin, kalan diğer DeprecationWarning ile ilgilenecek diğer 3 yapılandırmasını ayarlayın .

Bu konfigürasyon benim için çalışıyor!

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

Bu 4 DeprecationWarning'i çözecektir .

  1. Mevcut URL dizesi ayrıştırıcısı kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacak. Yeni ayrıştırıcıyı kullanmak için {useNewUrlParser: true} seçeneğini MongoClient.connect'e geçirin.
  2. Mevcut Sunucu Keşfi ve İzleme motoru kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacaktır. Yeni Sunucu Bulma ve İzleme motorunu kullanmak için, MongoClient yapıcısına {useUnifiedTopology: true} seçeneğini iletin.
  3. Collection.ensureIndex kullanımdan kaldırılmıştır. Bunun yerine createIndexes'i kullanın.
  4. DeprecationWarning: Gelincik findOneAndUpdate()ve findOneAndDelete()olmadan useFindAndModifyYANLıŞ olarak seçenek kümesi kaldırılıyor. Bkz: https://mongoosejs.com/docs/deprecations.html#-findandmodify- .

Umarım yardımcı olur.


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

Kodunuz bir nedenle createConnetion içeriyorsa (Benim durumumda GridFsStorage kullanıyorum), kodunuza aşağıdakileri eklemeyi deneyin:

    options: {
        useUnifiedTopology: true,
    }

dosyadan hemen sonra, şöyle:

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

Davanız benimkine benziyorsa, bu kesinlikle sorununuzu çözecektir. Saygılarımızla


0

Ben de aynı sorunla karşı karşıyaydım:

  1. Terminalde aşağıdakileri çalıştırarak mongoDB'ye bağlanmayı sağladım:

    brew services start mongodb-community@4.2
    

    Ve çıktıyı aldım:

    Successfully started `mongodb-community`
    

Mongodb'u
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ veya https://www.youtube.com/watch?v=IGIcrMTtjoU adresinde kurma talimatları

  1. Yapılandırmam aşağıdaki gibiydi:

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

Bu benim sorunumu çözdü!


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

Mongoose connect useUnifiedTopology'yi ayarlama : doğru seçenek

  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

Bu konuya başka bağımlılıklar ile de ilgisi olabileceğini eklemek istiyorum.

Örneğin, NodeJS, MongoDB veya Mongoose için güncellediğim veya ayarladığım hiçbir şey sorun değildi - ancak - connect-mongodb-sessiongüncellenmiş ve aynı hatayı atmaya başlamıştı. Çözelti, bu durumda, sadece sürümünü geri almak oldu connect-mongodb-sessionsürümden 2.3.0için 2.2.0.

görüntü açıklamasını buraya girin


0

her seferinde ortaya çıkan aynı hataları aldım ve bu benim için çalıştı

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

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

0

bu satırı kullan, bu benim için çalıştı

mongoose.set('useUnifiedTopology', true);

1
Mümkün olduğunda, lütfen yalnızca kod yerine ek açıklama sağlamaya çalışın. Bu tür cevaplar, topluluk üyelerinin ve özellikle yeni geliştiricilerin çözümün gerekçesini daha iyi anlamalarına yardımcı olduklarından ve takip sorularını ele alma ihtiyacını önlemeye yardımcı olduklarından daha yararlı olma eğilimindedir.
Rajan

0

Bir MongoDB sunucusu kullanıyorsanız, bağlantı sırasında küme saatinde bağlan'ı kullandıktan ve URL'yi bulduktan sonra, URL şu şekilde olacaktır

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

Bu durumda, parolayı veritabanı parolanız ve db adınızla değiştirmeyi ve ardından şunu kullanmayı unutmayın:

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

Mümkün olduğunda, lütfen yalnızca kod yerine ek açıklama sağlamaya çalışın. Bu tür cevaplar, topluluk üyelerinin ve özellikle yeni geliştiricilerin çözümün gerekçesini daha iyi anlamalarına yardımcı olduklarından ve takip sorularını ele alma ihtiyacını önlemeye yardımcı olduklarından daha yararlı olma eğilimindedir.
Rajan

0

Çok basit, kullandığınız kodu kaldırın ve aşağıdaki kodu kullanın:

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

0

typcript kullandıysanız MongoOptions'a config ekleyin

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

Mongod komutunuzu çalıştırmak ve sunucuyu çalışır durumda tutmak önemlidir. Değilse, bu hatayı yine de göreceksiniz.

Sana kodumu ekliyorum:

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

Bu çalışacak:

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

Bu benim için çalıştı

Kullananlar için şunu MongoClientdeneyin:

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

Firavun faresi için:

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

Diğer bağlantıyı kaldır


1
MongoClient kullanmadığımı itiraf ettim
iLiA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.