diff options
Diffstat (limited to 'src/mongo/db/ops/update.cpp')
-rw-r--r-- | src/mongo/db/ops/update.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mongo/db/ops/update.cpp b/src/mongo/db/ops/update.cpp index a600f37a543..4b92274f55a 100644 --- a/src/mongo/db/ops/update.cpp +++ b/src/mongo/db/ops/update.cpp @@ -99,11 +99,22 @@ UpdateResult update(OperationContext* opCtx, Database* db, const UpdateRequest& OpDebug* const nullOpDebug = nullptr; auto exec = uassertStatusOK(getExecutorUpdate(opCtx, nullOpDebug, collection, &parsedUpdate)); + BSONObj docImage; + PlanExecutor::ExecState state = PlanExecutor::ADVANCED; + if (request.shouldReturnAnyDocs()) { + state = exec->getNext(&docImage, nullptr); + } + + while (state == PlanExecutor::ADVANCED) { + state = exec->getNext(nullptr, nullptr); + } uassertStatusOK(exec->executePlan()); const UpdateStats* updateStats = UpdateStage::getUpdateStats(exec.get()); - return UpdateStage::makeUpdateResult(updateStats); + UpdateResult result = UpdateStage::makeUpdateResult(updateStats); + result.requestedDocImage = docImage.getOwned(); + return result; } BSONObj applyUpdateOperators(OperationContext* opCtx, |