summaryrefslogtreecommitdiff
path: root/src/mongo/db/field_parser.cpp
diff options
context:
space:
mode:
authorGreg Studer <greg@10gen.com>2013-11-01 10:35:06 -0400
committerGreg Studer <greg@10gen.com>2013-11-04 10:16:27 -0500
commit67bd639528d6d81c0a425c1889147fc25f97915e (patch)
tree844c5d6fcc9d4713f82271e1c0a93884c1a092ab /src/mongo/db/field_parser.cpp
parent4c900822abedd44779eaf2e9b8679690e69f9750 (diff)
downloadmongo-67bd639528d6d81c0a425c1889147fc25f97915e.tar.gz
SERVER-10519 aggregate upsert and n stats in mongos
Diffstat (limited to 'src/mongo/db/field_parser.cpp')
-rw-r--r--src/mongo/db/field_parser.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/mongo/db/field_parser.cpp b/src/mongo/db/field_parser.cpp
index 0ce90b95e9a..7a3a61b3203 100644
--- a/src/mongo/db/field_parser.cpp
+++ b/src/mongo/db/field_parser.cpp
@@ -283,4 +283,28 @@ namespace mongo {
return FIELD_INVALID;
}
+ FieldParser::FieldState FieldParser::extractID( BSONObj doc,
+ const BSONField<BSONObj>& field,
+ BSONObj* out,
+ string* errMsg ) {
+ BSONElement elem = doc[field.name()];
+ if (elem.eoo()) {
+ if (field.hasDefault()) {
+ *out = field.getDefault().firstElement().wrap( "" );
+ return FIELD_DEFAULT;
+ }
+ else {
+ return FIELD_NONE;
+ }
+ }
+
+ if ( elem.type() != Array ) {
+ *out = elem.wrap( "" ).getOwned();
+ return FIELD_SET;
+ }
+
+ _genFieldErrMsg(doc, field, "id", errMsg);
+ return FIELD_INVALID;
+ }
+
} // namespace mongo