diff --git a/mongoengine/queryset/transform.py b/mongoengine/queryset/transform.py index 057218508..cb2a4a66c 100644 --- a/mongoengine/queryset/transform.py +++ b/mongoengine/queryset/transform.py @@ -1,3 +1,5 @@ +import re + from collections import defaultdict from bson import ObjectId, SON @@ -147,7 +149,7 @@ def query(_doc_cls=None, **kwargs): if op is None or key not in mongo_query: mongo_query[key] = value elif key in mongo_query: - if isinstance(mongo_query[key], dict): + if isinstance(mongo_query[key], dict) and not isinstance(value, re._pattern_type): mongo_query[key].update(value) # $max/minDistance needs to come last - convert to SON value_dict = mongo_query[key] diff --git a/tests/queryset/transform.py b/tests/queryset/transform.py index a043a6472..01fd2758f 100644 --- a/tests/queryset/transform.py +++ b/tests/queryset/transform.py @@ -248,6 +248,12 @@ class Event(Document): with self.assertRaises(InvalidQueryError): events.count() + def test_and_filtering_with_same_key_and_regex(self): + class Doc(Document): + value = StringField() + + Doc.objects.filter(Q(value__startswith="test")&Q(value__not__startswith="test2")).count() + if __name__ == '__main__': unittest.main()