diff options
author | Misha Ivkov <misha.ivkov@10gen.com> | 2019-07-26 09:45:17 -0400 |
---|---|---|
committer | Misha Ivkov <misha.ivkov@10gen.com> | 2019-08-08 09:35:31 -0400 |
commit | e911ae3b0e1eba1339cbfa90d49a3daccd304e16 (patch) | |
tree | b502fa4ffade59d0cdb391deeeac8ad4b93c1c0d /src/mongo/db/query/sort_pattern.cpp | |
parent | 5057974733dd260edc5a07ef4d43a78338f8143a (diff) | |
download | mongo-e911ae3b0e1eba1339cbfa90d49a3daccd304e16.tar.gz |
SERVER-42298 Use SortPattern in the implementation of SortKeyGenerator
Diffstat (limited to 'src/mongo/db/query/sort_pattern.cpp')
-rw-r--r-- | src/mongo/db/query/sort_pattern.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/mongo/db/query/sort_pattern.cpp b/src/mongo/db/query/sort_pattern.cpp index 17df5adcca7..1964164cf5e 100644 --- a/src/mongo/db/query/sort_pattern.cpp +++ b/src/mongo/db/query/sort_pattern.cpp @@ -51,7 +51,22 @@ SortPattern::SortPattern(const BSONObj& obj, metaDoc.nFields() == 1); VariablesParseState vps = pExpCtx->variablesParseState; - patternPart.expression = ExpressionMeta::parse(pExpCtx, metaDoc.firstElement(), vps); + BSONElement metaElem = metaDoc.firstElement(); + + if (metaElem.valueStringData() == "textScore"_sd) { + // Valid meta sort. Just fall through. + } else if (metaElem.valueStringData() == "randVal"_sd) { + // Valid meta sort. Just fall through. + } else if (metaElem.valueStringData() == "searchScore"_sd) { + uasserted(31218, "$meta sort by 'searchScore' metadata is not supported"); + } else if (metaElem.valueStringData() == "searchHighlights"_sd) { + uasserted(31219, "$meta sort by 'searchHighlights' metadata is not supported"); + } else { + uasserted(31138, + str::stream() << "Illegal $meta sort: " << metaElem.valueStringData()); + } + patternPart.expression = + static_cast<ExpressionMeta*>(ExpressionMeta::parse(pExpCtx, metaElem, vps).get()); // If sorting by textScore, sort highest scores first. If sorting by randVal, order // doesn't matter, so just always use descending. |