summaryrefslogtreecommitdiff
path: root/src/mongo/db/ops/update.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/ops/update.cpp')
-rw-r--r--src/mongo/db/ops/update.cpp13
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,