summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_internal_unpack_bucket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/document_source_internal_unpack_bucket.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_internal_unpack_bucket.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/document_source_internal_unpack_bucket.cpp b/src/mongo/db/pipeline/document_source_internal_unpack_bucket.cpp
index b4cf0e8be4d..c8f3a61c400 100644
--- a/src/mongo/db/pipeline/document_source_internal_unpack_bucket.cpp
+++ b/src/mongo/db/pipeline/document_source_internal_unpack_bucket.cpp
@@ -328,6 +328,18 @@ boost::intrusive_ptr<DocumentSource> DocumentSourceInternalUnpackBucket::createF
field.find('.') == std::string::npos);
bucketSpec.addComputedMetaProjFields(field);
}
+ } else if (fieldName == kIncludeMinTimeAsMetadata) {
+ uassert(6460208,
+ str::stream() << kIncludeMinTimeAsMetadata
+ << " field must be a bool, got: " << elem.type(),
+ elem.type() == BSONType::Bool);
+ bucketSpec.includeMinTimeAsMetadata = elem.boolean();
+ } else if (fieldName == kIncludeMaxTimeAsMetadata) {
+ uassert(6460209,
+ str::stream() << kIncludeMaxTimeAsMetadata
+ << " field must be a bool, got: " << elem.type(),
+ elem.type() == BSONType::Bool);
+ bucketSpec.includeMaxTimeAsMetadata = elem.boolean();
} else {
uasserted(5346506,
str::stream()
@@ -436,6 +448,13 @@ void DocumentSourceInternalUnpackBucket::serializeToArray(
return compFields;
}()});
+ if (_bucketUnpacker.includeMinTimeAsMetadata()) {
+ out.addField(kIncludeMinTimeAsMetadata, Value{_bucketUnpacker.includeMinTimeAsMetadata()});
+ }
+ if (_bucketUnpacker.includeMaxTimeAsMetadata()) {
+ out.addField(kIncludeMaxTimeAsMetadata, Value{_bucketUnpacker.includeMaxTimeAsMetadata()});
+ }
+
if (!explain) {
array.push_back(Value(DOC(getSourceName() << out.freeze())));
if (_sampleSize) {
@@ -991,6 +1010,14 @@ Pipeline::SourceContainer::iterator DocumentSourceInternalUnpackBucket::doOptimi
// Keep going for next optimization.
}
+
+ if (deps.getNeedsMetadata(DocumentMetadataFields::MetaType::kTimeseriesBucketMinTime)) {
+ _bucketUnpacker.setIncludeMinTimeAsMetadata();
+ }
+
+ if (deps.getNeedsMetadata(DocumentMetadataFields::MetaType::kTimeseriesBucketMaxTime)) {
+ _bucketUnpacker.setIncludeMaxTimeAsMetadata();
+ }
}
// Attempt to optimize last-point type queries.