summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/process_interface/common_mongod_process_interface.cpp
diff options
context:
space:
mode:
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.cpp10
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