솔루션의 배경
몽구스 문서와 Benjamin의 답변에 명시된 것처럼이 메서드 Model.count()
는 더 이상 사용되지 않습니다. 를 사용하는 대신 count()
대안은 다음과 같습니다.
Model.countDocuments(filterObject, callback)
컬렉션의 필터와 일치하는 문서 수를 계산합니다. 빈 개체 {}를 필터로 전달하면 전체 컬렉션 검색이 실행됩니다. 컬렉션이 큰 경우 다음 방법을 사용할 수 있습니다.
Model.estimatedDocumentCount()
이 모델 방법은 MongoDB 컬렉션의 문서 수를 추정합니다. 이 방법은 countDocuments()
전체 컬렉션을 거치지 않고 컬렉션 메타 데이터를 사용하기 때문에 이전 . 그러나 메서드 이름에서 알 수 있듯이 db 구성에 따라 메타 데이터가 메서드 실행 시점에 컬렉션의 실제 문서 수를 반영하지 않을 수 있으므로 결과는 추정치입니다.
두 메소드 모두 몽구스 쿼리 객체를 반환하며 다음 두 가지 방법 중 하나로 실행할 수 있습니다. .exec()
나중에 쿼리를 실행하려는 경우 사용 합니다.
해결책
옵션 1 : 콜백 함수 전달
예를 들어 다음을 사용하여 컬렉션의 모든 문서를 계산합니다 .countDocuments()
.
someModel.countDocuments({}, function(err, docCount) {
if (err) { return handleError(err) } //handle possible errors
console.log(docCount)
//and do some other fancy stuff
})
또는 .countDocuments()
다음을 사용하여 특정 이름을 가진 컬렉션의 모든 문서를 계산합니다 .
someModel.countDocuments({ name: 'Snow' }, function(err, docCount) {
//see other example
}
옵션 2 : 사용 .then()
몽구스 쿼리에는 .then()
"그때"입니다. 이것은 편의를위한 것이며 쿼리 자체는 약속이 아닙니다.
예를 들어 다음을 사용하여 컬렉션의 모든 문서를 계산합니다 .estimatedDocumentCount()
.
someModel
.estimatedDocumentCount()
.then(docCount => {
console.log(docCount)
//and do one super neat trick
})
.catch(err => {
//handle possible errors
})
옵션 3 : async / await 사용
async / await 접근 방식 을 사용할 때 권장되는 방법은 .exec()
더 나은 스택 추적을 제공 하므로 함께 사용하는 것입니다 .
const docCount = await someModel.countDocuments({}).exec();
스택 오버플로로 학습,