summaryrefslogtreecommitdiff
path: root/s/shardkey.h
diff options
context:
space:
mode:
Diffstat (limited to 's/shardkey.h')
-rw-r--r--s/shardkey.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/s/shardkey.h b/s/shardkey.h
index 96301ff..976cff0 100644
--- a/s/shardkey.h
+++ b/s/shardkey.h
@@ -102,7 +102,21 @@ namespace mongo {
};
inline BSONObj ShardKeyPattern::extractKey(const BSONObj& from) const {
- BSONObj k = from.extractFields(pattern);
+ BSONObj k = from;
+ bool needExtraction = false;
+
+ BSONObjIterator a(from);
+ BSONObjIterator b(pattern);
+ while (a.more() && b.more()){
+ if (strcmp(a.next().fieldName(), b.next().fieldName()) != 0){
+ needExtraction = true;
+ break;
+ }
+ }
+
+ if (needExtraction || a.more() != b.more())
+ k = from.extractFields(pattern);
+
uassert(13334, "Shard Key must be less than 512 bytes", k.objsize() < 512);
return k;
}