diff options
author | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2021-02-04 00:15:42 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-02-04 17:11:08 +0000 |
commit | f6119db22f13329a15be3771f732088a06130922 (patch) | |
tree | 7774a89ed68e1ec0dda114a47747c3795fdb740c /src/mongo/db/pipeline/expression.cpp | |
parent | e2bdfbc6e480172015fae721eb3395f1837084c4 (diff) | |
download | mongo-f6119db22f13329a15be3771f732088a06130922.tar.gz |
SERVER-54011 Change showRecordId() to support the ObjectId type
Diffstat (limited to 'src/mongo/db/pipeline/expression.cpp')
-rw-r--r-- | src/mongo/db/pipeline/expression.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/mongo/db/pipeline/expression.cpp b/src/mongo/db/pipeline/expression.cpp index d86b50c527a..f7b723798f5 100644 --- a/src/mongo/db/pipeline/expression.cpp +++ b/src/mongo/db/pipeline/expression.cpp @@ -2806,9 +2806,14 @@ Value ExpressionMeta::evaluate(const Document& root, Variables* variables) const // Be sure that a RecordId can be represented by a long long. static_assert(RecordId::kMinRepr >= std::numeric_limits<long long>::min()); static_assert(RecordId::kMaxRepr <= std::numeric_limits<long long>::max()); - return metadata.hasRecordId() - ? Value{static_cast<long long>(metadata.getRecordId().as<int64_t>())} - : Value(); + if (!metadata.hasRecordId()) { + return Value(); + } + + return metadata.getRecordId().withFormat( + [](RecordId::Null n) { return Value(); }, + [](const int64_t rid) { return Value{static_cast<long long>(rid)}; }, + [](const OID& oid) { return Value(oid); }); case MetaType::kIndexKey: return metadata.hasIndexKey() ? Value(metadata.getIndexKey()) : Value(); case MetaType::kSortKey: |