summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher/expression_array.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/matcher/expression_array.cpp')
-rw-r--r--src/mongo/db/matcher/expression_array.cpp26
1 files changed, 11 insertions, 15 deletions
diff --git a/src/mongo/db/matcher/expression_array.cpp b/src/mongo/db/matcher/expression_array.cpp
index 4ca68653e3d..9f0b11f1424 100644
--- a/src/mongo/db/matcher/expression_array.cpp
+++ b/src/mongo/db/matcher/expression_array.cpp
@@ -128,14 +128,10 @@ void ElemMatchObjectMatchExpression::debugString(StringBuilder& debug, int level
_sub->debugString(debug, level + 1);
}
-void ElemMatchObjectMatchExpression::toBSON(BSONObjBuilder* out) const {
+void ElemMatchObjectMatchExpression::serialize(BSONObjBuilder* out) const {
BSONObjBuilder subBob;
- _sub->toBSON(&subBob);
- if (path().empty()) {
- out->append("$elemMatch", subBob.obj());
- } else {
- out->append(path(), BSON("$elemMatch" << subBob.obj()));
- }
+ _sub->serialize(&subBob);
+ out->append(path(), BSON("$elemMatch" << subBob.obj()));
}
@@ -202,16 +198,16 @@ void ElemMatchValueMatchExpression::debugString(StringBuilder& debug, int level)
}
}
-void ElemMatchValueMatchExpression::toBSON(BSONObjBuilder* out) const {
+void ElemMatchValueMatchExpression::serialize(BSONObjBuilder* out) const {
BSONObjBuilder emBob;
+
for (unsigned i = 0; i < _subs.size(); i++) {
- _subs[i]->toBSON(&emBob);
- }
- if (path().empty()) {
- out->append("$elemMatch", emBob.obj());
- } else {
- out->append(path(), BSON("$elemMatch" << emBob.obj()));
+ BSONObjBuilder predicate;
+ _subs[i]->serialize(&predicate);
+ BSONObj predObj = predicate.obj();
+ emBob.appendElements(predObj.firstElement().embeddedObject());
}
+ out->append(path(), BSON("$elemMatch" << emBob.obj()));
}
@@ -239,7 +235,7 @@ void SizeMatchExpression::debugString(StringBuilder& debug, int level) const {
}
}
-void SizeMatchExpression::toBSON(BSONObjBuilder* out) const {
+void SizeMatchExpression::serialize(BSONObjBuilder* out) const {
out->append(path(), BSON("$size" << _size));
}