サーバー検出および監視エンジンは非推奨です


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:現在のServer Discovery and Monitoringエンジンは非推奨であり、将来のバージョンで削除される予定です。新しいサーバー検出および監視エンジンを使用するには、オプション{useUnifiedTopology:true}をMongoClientコンストラクターに渡します。

何が問題ですか?useUnifiedTopology以前は使用していませんでしたが、コンソールに表示されるようになりました。設定に追加しましたが、それでもこの警告が表示されます。なぜですか?私も使用していませんMongoClient

編集

Felipe Pletsが答えたように、Mongooseに問題があり、後のバージョンでこのバグを修正しました。したがって、マングースのバージョンを更新することで問題を解決できます。

回答:


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

Mongooseのバージョン5.7で追加されたオプションのようですが、まだ十分に文書化されていません。ライブラリ履歴https://github.com/Automattic/mongoose/blob/master/History.mdで言及されていることすら見つかりませんでした

コードのコメントによると:

  • @param {Boolean} [options.useUnifiedTopology = false]デフォルトではFalse。設定trueMongoDBのドライバのレプリカセットとエンジンを監視シャードクラスタにオプトインします。

このエラーに関する問題もプロジェクトGitHubにあります:https//github.com/Automattic/mongoose/issues/8156

私の場合、レプリカセットまたはシャードクラスターでMongooseを使用していませんが、オプションはfalseである必要があります。しかし、falseの場合、設定はtrueである必要があると文句を言います。一度真になると、それでも機能しません。おそらく、私のデータベースがレプリカセットまたはシャードクラスターで実行されていないためです。

5.6.13にダウングレードしましたが、プロジェクトは正常に機能しています。したがって、今のところ私が見ている唯一のオプションは、それをダウングレードし、修正が新しいバージョンに更新されるのを待つことです。


同じ(ダウングレードバージョン)と思いましたが、mlabクラスターを使用しているので、警告が消えないのはなぜですか?
イリヤ

2
のようにの代わりに5.7.7使用createConnection()するとconnect()、最新のマングースにバグがありますmongoose.createConnection(conString, { useUnifiedTopology: true })useUnifiedTopologyは考慮されず、警告が表示されます。mongoose.set('useUnifiedTopology', true)私とのイベントはまだ警告を受け取ります。
LouisGrellet19年

2
5.6.13にダウングレードした後も警告が続く
O'DaneBrissett20年

1
ネイティブのMongoDBドライバーを使用すると、そのエラーが発生します。
Akhila

ここにすべての非推奨のオプションがあります:mongoosejs.com/docs/deprecations.html
MurtazaAhmad20年

28

mongoDBでは、現在のサーバーとエンジンの監視パッケージが廃止されたため、新しいサーバーとエンジンの監視パッケージを使用する必要があります。だからあなたはただ使う

{useUnifiedTopology:true}

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

13
あなたは私の質問を読んでいる場合、私は私が追加されたことが挙げuseUnifiedTopology: true私の構成では、それはまだ私が警告を示す
イリヤ

5
この問題が発生し、追加しましたuseUnifiedTopology: trueが、それでも同じメッセージがコンソールに表示されます。
RSA

7
それでもメッセージが表示される場合は、mongoose.set('useUnifiedTopology', true)mongoose.connectの前に呼び出してみてください。
dev4life

はい、これは正しい答えです。{}のペアの中に「useUnifiedTopology:true、useNewUrlParser:true」をまとめるだけです。「useCreateIndex:true」は使用しませんでしたが、いくつかのアイデアが得られます。dev4lifeの方法も機能します。
ウィリアム侯

mongoose .connect( "db conn url"、{useUnifiedTopology:true、useNewUrlParser:true、})。then(()=> console.log( 'MongoDB Connected!'))。catch(err => {err => console .log(err)})これが私のために働いたものです
SanketSonavane19年

9

これで私の問題は解決しました。

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

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

答えてくれてありがとう、これはマングース質問です、と私はmongoclient使用していない
イリヤ

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}を使用
NiranYousuf19年

3

そのエラーを回避するには、次のコードを使用してください

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

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

次のエラーを削除します:-

(node:7481)DeprecationWarning:現在のURL文字列パーサーは非推奨であり、将来のバージョンで削除される予定です。新しいパーサーを使用するには、オプション{useNewUrlParser:true}をMongoClient.connectに渡します。

(node:7481)DeprecationWarning:現在のServer Discovery and Monitoringエンジンは非推奨であり、将来のバージョンで削除される予定です。新しいサーバー検出および監視エンジンを使用するには、オプション{useUnifiedTopology:true}をMongoClientコンストラクターに渡します。


3
また、useUnifiedTopology: truemongoDBを使用するすべての依存関係に必ず追加してください。私の場合wiston-mongodbは、オプションにも追加する必要がありました winston.add(new winston.transports.MongoDB({ db: config.get('db'), options: { useUnifiedTopology: true } }));
Gael

@GaelMusikingalaこれが私の問題でした。それを指摘してくれてありがとう
akmalhakimi19 9120

@GaelMusikingala、私の命を救ってくれてありがとう。❤️👏
Mr.spShuvo20年

2

useUnifiedTopologyオプションを追加し、trueに設定します

他の残りのDeprecationWarningを処理するmongoose.connectオプションの他の3つの構成を設定します。

この構成は私のために働きます!

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

これにより、4つのDeprecationWarningが解決されます。

  1. 現在のURL文字列パーサーは非推奨であり、将来のバージョンで削除される予定です。新しいパーサーを使用するには、オプション{useNewUrlParser:true}をMongoClient.connectに渡します。
  2. 現在のサーバー検出および監視エンジンは非推奨であり、将来のバージョンで削除される予定です。新しいサーバー検出および監視エンジンを使用するには、オプション{useUnifiedTopology:true}をMongoClientコンストラクターに渡します。
  3. Collection.ensureIndexは非推奨です。代わりにcreateIndexesを使用してください。
  4. DeprecationWarning:Mongoose:findOneAndUpdate()およびオプションをfalseに設定し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

コードに何らかの理由でcreateConnetionが含まれている場合(私の場合は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でmongodbをインストールする手順

  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

マングース接続の設定useUnifiedTopology:trueオプション

  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(()=>{

他のconnectionOptionsを削除します


1
私は私がmongoClient使用していないことを認めた
イリヤ

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

typescriptを使用した場合は、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,
};

0

mongodコマンドを実行し、サーバーを実行し続けることが重要です。そうでない場合でも、このエラーが表示されます。

私はあなたに私のコードを添付します:

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

あなたの答えにいくつかの説明を追加してください!また、これをチェックすることを忘れないでください:どうすれば良い答えを書くことができますか?
PrathameshKosht​​i20年

0

mongoの作業サンプルコード、リファレンスリンク

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();
  });
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.