diff options
Diffstat (limited to 'src/mongo/db/keypattern.h')
-rw-r--r-- | src/mongo/db/keypattern.h | 141 |
1 files changed, 72 insertions, 69 deletions
diff --git a/src/mongo/db/keypattern.h b/src/mongo/db/keypattern.h index 78e1f3d59bf..f9ac83983e3 100644 --- a/src/mongo/db/keypattern.h +++ b/src/mongo/db/keypattern.h @@ -33,85 +33,88 @@ namespace mongo { +/** + * A KeyPattern is an expression describing a transformation of a document into a + * document key. Document keys are used to store documents in indices and to target + * sharded queries. + * + * The root field names of KeyPatterns are always (potentially-dotted) paths, and the values of + * the fields describe the type of indexing over the found elements. + * + * Examples: + * { a : 1 } + * { a : 1 , b : -1 } + * { a : "hashed" } + */ +class KeyPattern { +public: /** - * A KeyPattern is an expression describing a transformation of a document into a - * document key. Document keys are used to store documents in indices and to target - * sharded queries. - * - * The root field names of KeyPatterns are always (potentially-dotted) paths, and the values of - * the fields describe the type of indexing over the found elements. - * - * Examples: - * { a : 1 } - * { a : 1 , b : -1 } - * { a : "hashed" } + * Is the provided key pattern the index over the ID field? + * The always required ID index is always {_id: 1} or {_id: -1}. */ - class KeyPattern { - public: - - /** - * Is the provided key pattern the index over the ID field? - * The always required ID index is always {_id: 1} or {_id: -1}. - */ - static bool isIdKeyPattern(const BSONObj& pattern); + static bool isIdKeyPattern(const BSONObj& pattern); - /** - * Is the provided key pattern ordered increasing or decreasing or not? - */ - static bool isOrderedKeyPattern(const BSONObj& pattern); + /** + * Is the provided key pattern ordered increasing or decreasing or not? + */ + static bool isOrderedKeyPattern(const BSONObj& pattern); - /** - * Does the provided key pattern hash its keys? - */ - static bool isHashedKeyPattern(const BSONObj& pattern); + /** + * Does the provided key pattern hash its keys? + */ + static bool isHashedKeyPattern(const BSONObj& pattern); - /** - * Constructs a new key pattern based on a BSON document - */ - KeyPattern(const BSONObj& pattern); + /** + * Constructs a new key pattern based on a BSON document + */ + KeyPattern(const BSONObj& pattern); - /** - * Returns a BSON representation of this KeyPattern. - */ - const BSONObj& toBSON() const { return _pattern; } + /** + * Returns a BSON representation of this KeyPattern. + */ + const BSONObj& toBSON() const { + return _pattern; + } - /** - * Returns a string representation of this KeyPattern - */ - std::string toString() const{ return toBSON().toString(); } + /** + * Returns a string representation of this KeyPattern + */ + std::string toString() const { + return toBSON().toString(); + } - /* Takes a BSONObj whose field names are a prefix of the fields in this keyPattern, and - * outputs a new bound with MinKey values appended to match the fields in this keyPattern - * (or MaxKey values for descending -1 fields). This is useful in sharding for - * calculating chunk boundaries when tag ranges are specified on a prefix of the actual - * shard key, or for calculating index bounds when the shard key is a prefix of the actual - * index used. - * - * @param makeUpperInclusive If true, then MaxKeys instead of MinKeys will be appended, so - * that the output bound will compare *greater* than the bound being extended (note that - * -1's in the keyPattern will swap MinKey/MaxKey vals. See examples). - * - * Examples: - * If this keyPattern is {a : 1} - * extendRangeBound( {a : 55}, false) --> {a : 55} - * - * If this keyPattern is {a : 1, b : 1} - * extendRangeBound( {a : 55}, false) --> {a : 55, b : MinKey} - * extendRangeBound( {a : 55}, true ) --> {a : 55, b : MaxKey} - * - * If this keyPattern is {a : 1, b : -1} - * extendRangeBound( {a : 55}, false) --> {a : 55, b : MaxKey} - * extendRangeBound( {a : 55}, true ) --> {a : 55, b : MinKey} - */ - BSONObj extendRangeBound( const BSONObj& bound , bool makeUpperInclusive ) const; + /* Takes a BSONObj whose field names are a prefix of the fields in this keyPattern, and + * outputs a new bound with MinKey values appended to match the fields in this keyPattern + * (or MaxKey values for descending -1 fields). This is useful in sharding for + * calculating chunk boundaries when tag ranges are specified on a prefix of the actual + * shard key, or for calculating index bounds when the shard key is a prefix of the actual + * index used. + * + * @param makeUpperInclusive If true, then MaxKeys instead of MinKeys will be appended, so + * that the output bound will compare *greater* than the bound being extended (note that + * -1's in the keyPattern will swap MinKey/MaxKey vals. See examples). + * + * Examples: + * If this keyPattern is {a : 1} + * extendRangeBound( {a : 55}, false) --> {a : 55} + * + * If this keyPattern is {a : 1, b : 1} + * extendRangeBound( {a : 55}, false) --> {a : 55, b : MinKey} + * extendRangeBound( {a : 55}, true ) --> {a : 55, b : MaxKey} + * + * If this keyPattern is {a : 1, b : -1} + * extendRangeBound( {a : 55}, false) --> {a : 55, b : MaxKey} + * extendRangeBound( {a : 55}, true ) --> {a : 55, b : MinKey} + */ + BSONObj extendRangeBound(const BSONObj& bound, bool makeUpperInclusive) const; - BSONObj globalMin() const; + BSONObj globalMin() const; - BSONObj globalMax() const; + BSONObj globalMax() const; - private: - BSONObj _pattern; - }; +private: + BSONObj _pattern; +}; -} // namespace mongo +} // namespace mongo |