diff options
Diffstat (limited to 'src/mongo/db/pipeline/pipeline.cpp')
-rw-r--r-- | src/mongo/db/pipeline/pipeline.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/pipeline.cpp b/src/mongo/db/pipeline/pipeline.cpp index ac861a0f6dd..535c05a4030 100644 --- a/src/mongo/db/pipeline/pipeline.cpp +++ b/src/mongo/db/pipeline/pipeline.cpp @@ -96,6 +96,11 @@ intrusive_ptr<Pipeline> Pipeline::parseCommand(string& errmsg, continue; } + // ignore writeConcern since it's handled externally + if (str::equals(pFieldName, "writeConcern")) { + continue; + } + /* look for the aggregation command */ if (!strcmp(pFieldName, commandName)) { continue; @@ -254,6 +259,21 @@ Status Pipeline::checkAuthForCommand(ClientBasic* client, return Status(ErrorCodes::Unauthorized, "unauthorized"); } +bool Pipeline::aggSupportsWriteConcern(const BSONObj& cmd) { + if (cmd.hasField("pipeline") == false) { + return false; + } + + auto stages = cmd["pipeline"].Array(); + for (auto stage : stages) { + if (stage.Obj().hasField("$out")) { + return true; + } + } + + return false; +} + void Pipeline::detachFromOperationContext() { pCtx->opCtx = nullptr; |