summaryrefslogtreecommitdiff
path: root/src/mongo/bson/bsonobj.cpp
diff options
context:
space:
mode:
authorGregory Noma <gregory.noma@gmail.com>2020-12-07 09:59:02 -0500
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-12-07 18:24:35 +0000
commit5e278021327d3d281bc14466373eeaff9d1cf00b (patch)
treea9a97e98615c46782bf04431d10d008e7174cca9 /src/mongo/bson/bsonobj.cpp
parent32336d5a29e8af1500af7410add79f23a5efaad2 (diff)
downloadmongo-5e278021327d3d281bc14466373eeaff9d1cf00b.tar.gz
SERVER-53130 Support objects and arrays for time-series bucket min/max
Diffstat (limited to 'src/mongo/bson/bsonobj.cpp')
-rw-r--r--src/mongo/bson/bsonobj.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/mongo/bson/bsonobj.cpp b/src/mongo/bson/bsonobj.cpp
index f606cb7d13b..39cc5813d4c 100644
--- a/src/mongo/bson/bsonobj.cpp
+++ b/src/mongo/bson/bsonobj.cpp
@@ -619,12 +619,12 @@ BSONObj BSONObj::addField(const BSONElement& field) const {
}
BSONObj BSONObj::addFields(const BSONObj& from,
- const boost::optional<std::set<std::string>>& fields) const {
+ const boost::optional<StringDataSet>& fields) const {
BSONObjBuilder bob;
for (auto&& originalField : *this) {
auto commonField = from[originalField.fieldNameStringData()];
// If there is a common field, add the value from 'from' object.
- if (commonField && (!fields || fields->count(originalField.fieldName()))) {
+ if (commonField && (!fields || fields->count(originalField.fieldNameStringData()))) {
bob.append(commonField);
} else {
bob.append(originalField);
@@ -634,7 +634,7 @@ BSONObj BSONObj::addFields(const BSONObj& from,
for (auto&& fromField : from) {
// Ignore the common fields as they are already added earlier.
if (!hasField(fromField.fieldNameStringData()) &&
- (!fields || fields->count(fromField.fieldName()))) {
+ (!fields || fields->count(fromField.fieldNameStringData()))) {
bob.append(fromField);
}
}
@@ -664,6 +664,17 @@ BSONObj BSONObj::removeFields(const std::set<std::string>& fields) const {
return bob.obj();
}
+BSONObj BSONObj::removeFields(const StringDataSet& fields) const {
+ BSONObjBuilder bob;
+ for (auto&& field : *this) {
+ if (fields.count(field.fieldNameStringData())) {
+ continue;
+ }
+ bob.append(field);
+ }
+ return bob.obj();
+}
+
std::string BSONObj::hexDump() const {
std::stringstream ss;
const char* d = objdata();