summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_bucket_auto.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/document_source_bucket_auto.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_bucket_auto.cpp35
1 files changed, 17 insertions, 18 deletions
diff --git a/src/mongo/db/pipeline/document_source_bucket_auto.cpp b/src/mongo/db/pipeline/document_source_bucket_auto.cpp
index cec0be7b847..10300e9c334 100644
--- a/src/mongo/db/pipeline/document_source_bucket_auto.cpp
+++ b/src/mongo/db/pipeline/document_source_bucket_auto.cpp
@@ -57,15 +57,15 @@ boost::intrusive_ptr<Expression> parseGroupByExpression(
groupByField.embeddedObject().firstElementFieldName()[0] == '$') {
return Expression::parseObject(expCtx.get(), groupByField.embeddedObject(), vps);
} else if (groupByField.type() == BSONType::String &&
- // Lager than 2 because we need a '$', at least one char for the field name and
- // the final terminating 0.
- groupByField.valuestrsize() > 2 && groupByField.valueStringData()[0] == '$') {
+ groupByField.valueStringData()[0] == '$') {
return ExpressionFieldPath::parse(expCtx.get(), groupByField.str(), vps);
+ } else {
+ uasserted(
+ 40239,
+ str::stream() << "The $bucketAuto 'groupBy' field must be defined as a $-prefixed "
+ "path or an expression object, but found: "
+ << groupByField.toString(false, false));
}
- uasserted(40239,
- str::stream() << "The $bucketAuto 'groupBy' field must be defined as a $-prefixed "
- "path or an expression object, but found: "
- << groupByField.toString(false, false));
}
/**
@@ -221,7 +221,7 @@ void DocumentSourceBucketAuto::initializeBucketIteration() {
auto& metricsCollector = ResourceConsumption::MetricsCollector::get(pExpCtx->opCtx);
metricsCollector.incrementKeysSorted(_sorter->numSorted());
- metricsCollector.incrementSorterSpills(_sorter->stats().spilledRanges());
+ metricsCollector.incrementSorterSpills(_sorter->numSpills());
_sorter.reset();
@@ -372,25 +372,24 @@ void DocumentSourceBucketAuto::doDispose() {
_sortedInput.reset();
}
-Value DocumentSourceBucketAuto::serialize(const SerializationOptions& opts) const {
+Value DocumentSourceBucketAuto::serialize(
+ boost::optional<ExplainOptions::Verbosity> explain) const {
MutableDocument insides;
- insides["groupBy"] = _groupByExpression->serialize(opts);
- insides["buckets"] = opts.serializeLiteral(_nBuckets);
+ insides["groupBy"] = _groupByExpression->serialize(static_cast<bool>(explain));
+ insides["buckets"] = Value(_nBuckets);
if (_granularityRounder) {
- //"granularity" only supports some strings, so a specific representative value is used if
- // necessary.
- insides["granularity"] =
- opts.serializeLiteral(_granularityRounder->getName(), Value("R5"_sd));
+ insides["granularity"] = Value(_granularityRounder->getName());
}
MutableDocument outputSpec(_accumulatedFields.size());
for (auto&& accumulatedField : _accumulatedFields) {
intrusive_ptr<AccumulatorState> accum = accumulatedField.makeAccumulator();
- outputSpec[opts.serializeFieldPathFromString(accumulatedField.fieldName)] =
- Value(accum->serialize(
- accumulatedField.expr.initializer, accumulatedField.expr.argument, opts));
+ outputSpec[accumulatedField.fieldName] =
+ Value(accum->serialize(accumulatedField.expr.initializer,
+ accumulatedField.expr.argument,
+ static_cast<bool>(explain)));
}
insides["output"] = outputSpec.freezeToValue();