diff options
author | David Storch <david.storch@10gen.com> | 2018-06-26 18:33:11 -0400 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2018-06-27 16:23:02 -0400 |
commit | ed5dccdc3ffe74a869c04ee31c61e61da0b0d0c3 (patch) | |
tree | f9a7c4396fe030a58848165cc6563d9c8e77094d | |
parent | 4c2d1a88c19c316c7cfc895a6e0f7d1a81e85bd7 (diff) | |
download | mongo-ed5dccdc3ffe74a869c04ee31c61e61da0b0d0c3.tar.gz |
SERVER-35693 Pre-sort $in elements to avoid O(n^2) boost::flat_set() complexity.
-rw-r--r-- | src/mongo/db/matcher/expression_leaf.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/mongo/db/matcher/expression_leaf.cpp b/src/mongo/db/matcher/expression_leaf.cpp index dce381e8a27..843f086bf58 100644 --- a/src/mongo/db/matcher/expression_leaf.cpp +++ b/src/mongo/db/matcher/expression_leaf.cpp @@ -551,7 +551,10 @@ Status ArrayFilterEntries::setEqualities(std::vector<BSONElement> equalities) { } } - _equalities = BSONElementFlatSet(equalities.begin(), equalities.end()); + // Sort the list of equalities to work around https://svn.boost.org/trac10/ticket/13140. + std::sort(equalities.begin(), equalities.end(), BSONElementCmpWithoutField()); + _equalities = + BSONElementFlatSet(equalities.begin(), equalities.end(), BSONElementCmpWithoutField()); return Status::OK(); } |