본문 바로가기
데이터베이스/MongoDB

[Mongoose] Deprecation Warnings(remove(), update(), count())

by minhyeok.lee 2023. 2. 24.
반응형

Deprecation Warnings (지원중단 경고)목록_(remove(), update(), count())

https://www.npmjs.com/package/mongodb

 

mongodb

The official MongoDB driver for Node.js. Latest version: 5.1.0, last published: 8 hours ago. Start using mongodb in your project by running `npm i mongodb`. There are 11529 other projects in the npm registry using mongodb.

www.npmjs.com

 

Mongoose 사용자가 알아야 할 MongoDB Node.js 드라이버에는 몇 가지 지원 중단이 있다.

 

 

 

remove()

MongoDB 드라이버의 remove() 함수 대신 deleteOne() 및 deleteMany()를 사용한다.

이는 모든 MongoDB 드라이버에서 CRUD 작업을 위한 일관된 API를 제공하는 것을 목표로 하는 MongoDB CRUD 사양을 준수하기 위한 것이다.

 

이 사용 중단 경고를 제거하려면 remove()에 대한 단일 옵션을 지정하지 않는 한 remove()의 사용을 deleteMany()로 바꾸어야 한다.

단일 옵션은 remove()를 최대 하나의 문서 삭제로 제한하므로 remove(filter, { single: true })를 deleteOne(filter)으로 바꿔야 한다.

// 지원중단 경고코드
MyModel.remove({ foo: 'bar' });
// 대체코드
MyModel.deleteMany({ foo: 'bar' });

// 지원중단 경고코드
MyModel.remove({ answer: 42 }, { single: true });
// 대체코드
MyModel.deleteOne({ answer: 42 });

 - remove()를 단일 옵션을 지정하지 않았다면 deleteMany()로 변경

 - remove()를 단일 옵션을 지정({ single: true })했다면 deleteOne()로 변경

 

 

update() 

update() 함수는 더 명확한 updateOne(), updateMany() 및 replaceOne() 함수를 위해 더 이상 사용되지 않는다.

다중 또는 덮어쓰기 옵션을 사용하지 않는 한 update()를 updateOne()으로 바꿔야 한다.

// 지원중단 경고코드
MyModel.update({ foo: 'bar' }, { answer: 42 });
// 대체코드
MyModel.updateOne({ foo: 'bar' }, { answer: 42 });

// "overwrite: true"를 사용하는 경우 다음 대신 "replaceOne()"을 사용해야 한다.
MyModel.update(filter, update, { overwrite: true });
// 대체코드
MyModel.replaceOne(filter, update);

// "multi: true"를 사용하는 경우 대신 "updateMany()"를 사용해야 한다.
MyModel.update(filter, update, { multi: true });
// 대체코드
MyModel.updateMany(filter, update);

 - update()를 다중 또는 덮어쓰기 옵션을 사용하지 않는 경우 updateOne로 변경

 - update()를 덮어쓰기 옵션을 사용하는 경우({ overwrite: true}) replaceOne()로 변경

 - update()를 다중옵션을 사용하는 경우({ multi: true})일때는 updateMany()로 변경

 

count()

MongoDB 서버는 두 개의 별도 함수인 countDocuments() 및 estimateDocumentCount()를 위해 count() 함수를 더 이상 사용하지 않는다.

 

둘 사이의 차이점은 countDocuments()가 find()와 같은 필터 매개변수를 허용할 수 있다는 것이다.

estimateDocumentCount() 함수는 더 빠르지만 컬렉션에 있는 총 문서 수만 알려줄 수 있다.

estimateDocumentCount()에 필터를 전달할 수 없다.

 

마이그레이션하려면 count()에 인수를 전달하지 않는다면 count()를 countDocuments()로 바꾼다.

쿼리와 일치하는 문서를 세는 대신 count()를 사용하여 컬렉션의 모든 문서를 세는 경우 estimateDocumentCount()를 사용한다.

// 지원중단 경고코드
MyModel.count({ answer: 42 });
// 대체코드
MyModel.countDocuments({ answer: 42 });

// 컬렉션에 있는 모든 문서를 세는 경우 (인수가 없을 경우)
MyModel.count();
// 대체코드
MyModel.estimatedDocumentCount();

// 지원중단 경고코드
MyModel.find({ answer: 42 }).count().exec();
// 대체코드
MyModel.find({ answer: 42 }).countDocuments().exec();

// 지원중단 경고코드
MyModel.find().count().exec();
// 대체코드 (find에 필터가 없기때문에)
MyModel.find().estimatedDocumentCount().exec();

 - count()를 전체 컬렉션(필터 있음)에 있는 문서 수를 계산하려는 경우가 아니면 countDocuments()로 변경

 - count()를 전체 컬렉션(필터 없음)에 있는 문서 수를 계산하려는 경우  estimateDocumentCount()로 변경

 

 

정리

1. remove()를 deleteOne() 또는 deleteMany()로 교체

2. update()를 updateOne(), updateMany() 또는 replaceOne()으로 교체

3. count()를 countDocuments() 또는 estimateDocumentCount() 교체

 

반응형

댓글