diff options
Diffstat (limited to 'src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp')
-rw-r--r-- | src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp b/src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp index bc9f5205cd8..e73764a6a7e 100644 --- a/src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp +++ b/src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp @@ -277,8 +277,14 @@ CommonMongodProcessInterface::attachCursorSourceToPipelineForLocalRead(Pipeline* std::unique_ptr<Pipeline, PipelineDeleter> pipeline(ownedPipeline, PipelineDeleter(expCtx->opCtx)); - invariant(pipeline->getSources().empty() || - !dynamic_cast<DocumentSourceCursor*>(pipeline->getSources().front().get())); + boost::optional<DocumentSource*> firstStage = pipeline->getSources().empty() + ? boost::optional<DocumentSource*>{} + : pipeline->getSources().front().get(); + invariant(!firstStage || !dynamic_cast<DocumentSourceCursor*>(*firstStage)); + if (firstStage && !(*firstStage)->constraints().requiresInputDocSource) { + // There's no need to attach a cursor here. + return pipeline; + } boost::optional<AutoGetCollectionForReadCommand> autoColl; const NamespaceStringOrUUID nsOrUUID = expCtx->uuid |