summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZahra Poonevala <zahra.poonevala@mongodb.com>2022-06-30 19:39:31 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-06-30 20:47:52 +0000
commit07b59b69e23e511a63da70a25e88fc87e206ce3a (patch)
tree2d90dcd587fc990a67493fafec823ff6cc3a8df9 /src
parent831c5c4617312f901dfa3d70838a591365e12825 (diff)
downloadmongo-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.cpp9
-rw-r--r--src/mongo/db/pipeline/document_source_fill.idl3
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"