ソリューションの背景
マングースのドキュメントとベンジャミンの回答で述べられているように、このメソッドModel.count()
は非推奨です。を使用する代わりにcount()
、代替方法は次のとおりです。
Model.countDocuments(filterObject, callback)
コレクション内のフィルターに一致するドキュメントの数をカウントします。空のオブジェクト{}をフィルターとして渡すと、完全なコレクションスキャンが実行されます。コレクションが大きい場合は、次の方法を使用できます。
Model.estimatedDocumentCount()
このモデルメソッドは、MongoDBコレクション内のドキュメント数を推定します。この方法は以前よりも高速ですcountDocuments()
、コレクション全体を処理する代わりにコレクションメタデータを使用するため。ただし、メタデータはメソッド実行時のコレクション内のドキュメントの実際の数を反映していない可能性があるため、メソッド名が示すように、db構成によっては、結果は推定値です。
どちらのメソッドも、次の2つの方法のいずれかで実行できるマングースクエリオブジェクトを返します。.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()
「thenable」があります。これは便宜上のものであり、クエリ自体は約束ではありません。
たとえば、次のコマンドを使用して、コレクション内のすべてのドキュメントをカウントします.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();
スタックオーバーフローによる学習、