From 8ec35cb932d07eb034beee2b1938800675fb3c0c Mon Sep 17 00:00:00 2001 From: Nick Zolnierz Date: Fri, 16 Jun 2017 09:49:54 -0400 Subject: SERVER-29620 Add shorthand syntax for retrieving the record count for a collection using the agg stage --- src/mongo/db/stats/storage_stats.cpp | 20 ++++++++++++++++++++ src/mongo/db/stats/storage_stats.h | 9 ++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) (limited to 'src/mongo/db/stats') diff --git a/src/mongo/db/stats/storage_stats.cpp b/src/mongo/db/stats/storage_stats.cpp index fca73b4a473..4d45dc02b4b 100644 --- a/src/mongo/db/stats/storage_stats.cpp +++ b/src/mongo/db/stats/storage_stats.cpp @@ -108,4 +108,24 @@ Status appendCollectionStorageStats(OperationContext* opCtx, return Status::OK(); } + +Status appendCollectionRecordCount(OperationContext* opCtx, + const NamespaceString& nss, + BSONObjBuilder* result) { + AutoGetCollectionForReadCommand ctx(opCtx, nss); + if (!ctx.getDb()) { + return {ErrorCodes::BadValue, + str::stream() << "Database [" << nss.db().toString() << "] not found."}; + } + + Collection* collection = ctx.getCollection(); + if (!collection) { + return {ErrorCodes::BadValue, + str::stream() << "Collection [" << nss.toString() << "] not found."}; + } + + result->appendNumber("count", static_cast(collection->numRecords(opCtx))); + + return Status::OK(); +} } // namespace mongo diff --git a/src/mongo/db/stats/storage_stats.h b/src/mongo/db/stats/storage_stats.h index 0f62229c80a..f3a3db99b9b 100644 --- a/src/mongo/db/stats/storage_stats.h +++ b/src/mongo/db/stats/storage_stats.h @@ -38,10 +38,17 @@ namespace mongo { /** * Appends to 'builder' storage related statistics for the collection represented by 'nss'. - * Used by both the collStats command and the $collStats aggregation stage. */ Status appendCollectionStorageStats(OperationContext* opCtx, const NamespaceString& nss, const BSONObj& param, BSONObjBuilder* builder); + +/** + * Appends the collection record count to 'builder' for the collection represented by 'nss'. + */ +Status appendCollectionRecordCount(OperationContext* opCtx, + const NamespaceString& nss, + BSONObjBuilder* builder); + }; // namespace mongo -- cgit v1.2.1