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

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에 문제가 있었고 이후 버전에서이 버그를 수정했습니다. 따라서 몽구스 버전을 업데이트하여 문제를 해결할 수 있습니다.



답변

최신 정보

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


답변

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

{useUnifiedTopology : true}

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


답변

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

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

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


답변

당신은 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로 설정하십시오 .

나머지 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- .

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


답변

해당 오류를 방지하려면 다음 코드를 사용하십시오.

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


답변

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

다음 오류를 제거합니다.

(node ​​: 7481) DeprecationWarning : 현재 URL 문자열 파서는 더 이상 사용되지 않으며 향후 버전에서 제거 될 예정입니다. 새 파서를 사용하려면 {useNewUrlParser : true} 옵션을 MongoClient.connect에 전달합니다.

(node ​​: 7481) DeprecationWarning : 현재 서버 검색 및 모니터링 엔진은 더 이상 사용되지 않으며 향후 버전에서 제거 될 예정입니다. 새 서버 검색 및 모니터링 엔진을 사용하려면 {useUnifiedTopology : true} 옵션을 MongoClient 생성자에 전달합니다.