diff options
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.cpp | 27 |
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. |