diff options
author | Zahra Poonevala <zahra.poonevala@mongodb.com> | 2022-06-30 19:39:31 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-06-30 20:47:52 +0000 |
commit | 07b59b69e23e511a63da70a25e88fc87e206ce3a (patch) | |
tree | 2d90dcd587fc990a67493fafec823ff6cc3a8df9 /src | |
parent | 831c5c4617312f901dfa3d70838a591365e12825 (diff) | |
download | mongo-07b59b69e23e511a63da70a25e88fc87e206ce3a.tar.gz |
SERVER-63503 $fill.partitionBy accepts string or object
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/pipeline/document_source_fill.cpp | 9 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_fill.idl | 3 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/mongo/db/pipeline/document_source_fill.cpp b/src/mongo/db/pipeline/document_source_fill.cpp index ea69f0cdf0a..f7938a89a63 100644 --- a/src/mongo/db/pipeline/document_source_fill.cpp +++ b/src/mongo/db/pipeline/document_source_fill.cpp @@ -29,13 +29,16 @@ #include "mongo/db/pipeline/document_source_fill.h" +#include "mongo/bson/bsontypes.h" #include "mongo/db/pipeline/document_source_add_fields.h" #include "mongo/db/pipeline/document_source_set_window_fields.h" #include "mongo/db/pipeline/expression.h" #include "mongo/db/pipeline/expression_context.h" #include "mongo/db/pipeline/field_path.h" +#include "mongo/stdx/variant.h" #include "mongo/util/assert_util.h" #include "mongo/util/visit_helper.h" +#include <string> namespace mongo { @@ -113,7 +116,11 @@ std::list<boost::intrusive_ptr<DocumentSource>> createFromBson( uassert(6050204, "Maximum one of 'partitionBy' and 'partitionByFields can be specified in '$fill'", !spec.getPartitionByFields()); - setWindowFieldsSpec.append("partitionBy", partitionByUnparsedExpr.value()); + auto partitionByField = partitionByUnparsedExpr.get(); + if (std::string* partitionByString = stdx::get_if<std::string>(&partitionByField)) { + setWindowFieldsSpec.append("partitionBy", *partitionByString); + } else + setWindowFieldsSpec.append("partitionBy", stdx::get<BSONObj>(partitionByField)); } if (auto&& partitionByFields = spec.getPartitionByFields()) { diff --git a/src/mongo/db/pipeline/document_source_fill.idl b/src/mongo/db/pipeline/document_source_fill.idl index 59560dabe51..6d4f45c3a0e 100644 --- a/src/mongo/db/pipeline/document_source_fill.idl +++ b/src/mongo/db/pipeline/document_source_fill.idl @@ -57,7 +57,8 @@ structs: optional: true partitionBy: description: "An expression to be used to partition the input." - type: object + type: + variant: [object, string] optional: true output: description: "An object where each field is a field to be filled and values are the fill functions" |