서버 검색 및 모니터링 엔진은 더 이상 사용되지 않습니다.


105

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 : 현재 서버 검색 및 모니터링 엔진은 더 이상 사용되지 않으며 향후 버전에서 제거 될 예정입니다. 새 서버 검색 및 모니터링 엔진을 사용하려면 {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 여야합니다. 그러나 거짓이면 설정이 참이어야한다고 불평합니다. 일단 사실이면 내 데이터베이스가 복제 세트 또는 샤딩 된 클러스터에서 실행되지 않기 때문에 여전히 작동하지 않습니다.

5.6.13으로 다운 그레이드했고 프로젝트가 다시 정상적으로 작동합니다. 따라서 지금 내가 볼 수있는 유일한 옵션은 다운 그레이드하고 수정 사항이 최신 버전으로 업데이트 될 때까지 기다리는 것입니다.


나는 같은 생각 (다운 그레이드 버전), 나는 mlab 클러스터를 사용하고 있으므로 경고가 사라지지 않는 이유일까요?
iLiA

2
최신 몽구스의 버그가 5.7.7당신이 사용하는 경우 createConnection()대신이 connect()같은 mongoose.createConnection(conString, { useUnifiedTopology: true }). useUnifiedTopology고려되지 않으며 여전히 경고를 받게됩니다. 와 이벤트 mongoose.set('useUnifiedTopology', true)난 여전히 경고를 얻을.
Louis Grellet 19

2
5.6.13으로 다운 그레이드 한 후에도 경고가 계속
유지됨

1
네이티브 MongoDB 드라이버를 사용하면 오류가 발생합니다!
Akhila

여기에서 우리는 모든 사용되지 않는 옵션을 사용할 수 있습니다 mongoosejs.com/docs/deprecations.html을
Murtaza 아마드

28

mongoDB에서는 현재 서버 및 엔진 모니터링 패키지가 더 이상 사용되지 않으므로 새 서버 및 엔진 모니터링 패키지를 사용해야합니다. 그래서 당신은

{useUnifiedTopology : true}

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

13
내 질문을 읽으면 내 useUnifiedTopology: true구성에 추가했다고 언급 했지만 여전히 경고가 표시됩니다
iLiA

5
이 문제가 있었고 추가 useUnifiedTopology: true했지만 여전히 동일한 메시지가 콘솔에 표시됩니다.
RSA

7
여전히 메시지를받는 사람은 mongoose.set('useUnifiedTopology', true)mongoose.connect 전에 전화 해보세요 .
dev4life

네, 정답입니다. {} 쌍 안에 "useUnifiedTopology : true, useNewUrlParser : true"를 함께 넣으면됩니다. 그래도 "useCreateIndex : true"를 사용하지 않았지만 약간의 아이디어를 얻었습니다. dev4life의 방식도 작동합니다.
William Hou

mongoose .connect ( "db conn url", {useUnifiedTopology : true, useNewUrlParser : true,}) .then (() => console.log ( 'MongoDB Connected!')) .catch (err => {err => console .LOG (ERR)는})이 나를 위해 일한 것입니다
Sanket Sonavane

9

이것은 내 문제를 해결했습니다.

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

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

답변 주셔서 감사합니다.하지만 이것은 몽구스 질문입니다. 저는 mongoclient를 사용하고 있지 않습니다
iLiA

4
@iLiA 천만에요. 네, 알아요. 하지만이 답변은 누군가에게 도움이 될 수 있습니다. 내용이 아닌 제목 주제로 정확히 질문을 찾았 기 때문입니다 (그리고 질문의 내용은 MongoClient에 대한 일반적인 정보와 매우 유사합니다)
Юрий Светлов

3

당신은 async await를 시도 할 수 있습니다

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

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 : 몽구스 findOneAndUpdate()findOneAndDelete()를 빼고 useFindAndModifyfalse로 옵션 세트가 사용되지 않습니다. 참조 : https://mongoosejs.com/docs/deprecations.html#-findandmodify- .

도움이 되었기를 바랍니다.


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 : 현재 서버 검색 및 모니터링 엔진은 더 이상 사용되지 않으며 향후 버전에서 제거 될 예정입니다. 새 서버 검색 및 모니터링 엔진을 사용하려면 {useUnifiedTopology : true} 옵션을 MongoClient 생성자에 전달합니다.


3
또한 추가해야합니다 useUnifiedTopology: true모든 내가 사용하던 내 경우, MongoDB를 사용 종속성 wiston-mongodb나뿐만 아니라 옵션에 추가했다 winston.add(new winston.transports.MongoDB({ db: config.get('db'), options: { useUnifiedTopology: true } }));
가엘 Musikingala

@GaelMusikingala 이것은 내 문제였습니다. 지적 해 주셔서 감사합니다
akmalhakimi1991

@GaelMusikingala, 내 생명을 구 해주셔서 감사합니다. ❤️ 👏
Mr.spShuvo

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

Mongoose Connect 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
가능하면 코드가 아닌 추가 설명을 제공하도록 노력하십시오. 이러한 답변은 커뮤니티 구성원, 특히 새로운 개발자가 솔루션의 이유를 더 잘 이해하고 후속 질문을 처리 할 필요성을 방지하는 데 도움이되므로 더 유용합니다.
Rajan

0

MongoDB 서버를 사용하는 경우 연결시 클러스터 시계에서 연결을 사용하고 URL을 찾은 후 URL은 다음과 같이 표시됩니다.

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

이 경우 암호를 데이터베이스 암호 및 db 이름으로 바꾸고 다음을 사용하는 것을 잊지 마십시오.

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

가능하면 코드가 아닌 추가 설명을 제공하도록 노력하십시오. 이러한 답변은 커뮤니티 구성원, 특히 새로운 개발자가 솔루션의 이유를 더 잘 이해하고 후속 질문을 처리 할 필요성을 방지하는 데 도움이되므로 더 유용합니다.
Rajan

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

위의 두 번째 줄을 자르고 그 줄을 바꿉니다.

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


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.