diff options
Diffstat (limited to 'src/mongo/s/commands/cluster_find_cmd.cpp')
-rw-r--r-- | src/mongo/s/commands/cluster_find_cmd.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/mongo/s/commands/cluster_find_cmd.cpp b/src/mongo/s/commands/cluster_find_cmd.cpp index f879e3f1b96..a69d1e4a44f 100644 --- a/src/mongo/s/commands/cluster_find_cmd.cpp +++ b/src/mongo/s/commands/cluster_find_cmd.cpp @@ -119,7 +119,7 @@ public: void explain(OperationContext* opCtx, ExplainOptions::Verbosity verbosity, - BSONObjBuilder* result) override { + rpc::ReplyBuilderInterface* result) override { // Parse the command BSON to a QueryRequest. bool isExplain = true; auto qr = @@ -150,15 +150,17 @@ public: const char* mongosStageName = ClusterExplain::getStageNameForReadOp(shardResponses.size(), _request.body); + auto bodyBuilder = result->getBodyBuilder(); uassertStatusOK(ClusterExplain::buildExplainResult( opCtx, ClusterExplain::downconvert(opCtx, shardResponses), mongosStageName, millisElapsed, - result)); + &bodyBuilder)); } catch (const ExceptionFor<ErrorCodes::CommandOnShardedViewNotSupportedOnMongod>& ex) { - result->resetToEmpty(); + auto bodyBuilder = result->getBodyBuilder(); + bodyBuilder.resetToEmpty(); auto aggCmdOnView = uassertStatusOK(qr->asAggregationCommand()); @@ -173,7 +175,7 @@ public: nsStruct.executionNss = std::move(ex->getNamespace()); uassertStatusOK(ClusterAggregate::runAggregate( - opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, result)); + opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, &bodyBuilder)); } } @@ -199,9 +201,11 @@ public: std::vector<BSONObj> batch; auto cursorId = ClusterFind::runQuery(opCtx, *cq, ReadPreferenceSetting::get(opCtx), &batch); - auto bodyBuilder = result->getBodyBuilder(); + // Build the response document. - CursorResponseBuilder firstBatch(/*firstBatch*/ true, &bodyBuilder); + CursorResponseBuilder::Options options; + options.isInitialResponse = true; + CursorResponseBuilder firstBatch(result, options); for (const auto& obj : batch) { firstBatch.append(obj); } |