diff options
Diffstat (limited to 'src/mongo/db/pipeline/document_source_bucket_auto.cpp')
| -rw-r--r-- | src/mongo/db/pipeline/document_source_bucket_auto.cpp | 35 |
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(); |
