diff options
Diffstat (limited to 'db')
-rw-r--r-- | db/jsobj.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/db/jsobj.cpp b/db/jsobj.cpp index e392385827f..25ab8a84dbb 100644 --- a/db/jsobj.cpp +++ b/db/jsobj.cpp @@ -741,16 +741,18 @@ namespace mongo { BSONElement BSONObj::getFieldDottedOrArray(const char *&name) const { const char *p = strchr(name, '.'); - string left; + + BSONElement sub; + if ( p ) { - left = string(name, p-name); + sub = getField( string(name, p-name) ); name = p + 1; } else { - left = string(name); + sub = getField( name ); name = name + strlen(name); } - BSONElement sub = getField(left.c_str()); + if ( sub.eoo() ) return nullElement; else if ( sub.type() == Array || name[0] == '\0') |