summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_internal_all_collection_stats.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/document_source_internal_all_collection_stats.h')
-rw-r--r--src/mongo/db/pipeline/document_source_internal_all_collection_stats.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/document_source_internal_all_collection_stats.h b/src/mongo/db/pipeline/document_source_internal_all_collection_stats.h
index f3c89bbf93a..491b6354c3f 100644
--- a/src/mongo/db/pipeline/document_source_internal_all_collection_stats.h
+++ b/src/mongo/db/pipeline/document_source_internal_all_collection_stats.h
@@ -32,6 +32,7 @@
#include "mongo/db/pipeline/document_source.h"
#include "mongo/db/pipeline/document_source_coll_stats.h"
#include "mongo/db/pipeline/document_source_internal_all_collection_stats_gen.h"
+#include "mongo/db/pipeline/document_source_match.h"
namespace mongo {
@@ -106,6 +107,13 @@ public:
static boost::intrusive_ptr<DocumentSource> createFromBsonInternal(
BSONElement elem, const boost::intrusive_ptr<ExpressionContext>& pExpCtx);
+ Pipeline::SourceContainer::iterator doOptimizeAt(Pipeline::SourceContainer::iterator itr,
+ Pipeline::SourceContainer* container) final;
+
+ void serializeToArray(
+ std::vector<Value>& array,
+ boost::optional<ExplainOptions::Verbosity> explain = boost::none) const final;
+
private:
GetNextResult doGetNext() final;
@@ -113,5 +121,9 @@ private:
// options.
DocumentSourceInternalAllCollectionStatsSpec _internalAllCollectionStatsSpec;
boost::optional<std::deque<BSONObj>> _catalogDocs;
+
+ // A $match stage can be absorbed in order to avoid unnecessarily computing the stats for
+ // collections that do not match that predicate.
+ boost::intrusive_ptr<DocumentSourceMatch> _absorbedMatch;
};
} // namespace mongo