From be3643c962997771ad0f88d98ece504dbfd5023f Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Fri, 27 Jun 2014 13:39:47 +0100 Subject: [PATCH] Added `elemMatch` operator as well - `match` is too obscure #653 --- docs/changelog.rst | 1 + mongoengine/queryset/transform.py | 4 ++-- tests/queryset/queryset.py | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index dd931508..291371fb 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -6,6 +6,7 @@ Changelog Changes in 0.9.X - DEV ====================== +- Added `elemMatch` operator as well - `match` is too obscure #653 - Added support for progressive JPEG #486 #548 - Allow strings to be used in index creation #675 - Fixed EmbeddedDoc weakref proxy issue #592 diff --git a/mongoengine/queryset/transform.py b/mongoengine/queryset/transform.py index d72d97a3..fa97f8fe 100644 --- a/mongoengine/queryset/transform.py +++ b/mongoengine/queryset/transform.py @@ -11,7 +11,7 @@ __all__ = ('query', 'update') COMPARISON_OPERATORS = ('ne', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'mod', - 'all', 'size', 'exists', 'not') + 'all', 'size', 'exists', 'not', 'elemMatch') GEO_OPERATORS = ('within_distance', 'within_spherical_distance', 'within_box', 'within_polygon', 'near', 'near_sphere', 'max_distance', 'geo_within', 'geo_within_box', @@ -95,7 +95,7 @@ def query(_doc_cls=None, _field_operation=False, **query): if op in GEO_OPERATORS: value = _geo_operator(field, op, value) elif op in CUSTOM_OPERATORS: - if op == 'match': + if op in ('elem_match', 'match'): value = field.prepare_query_value(op, value) value = {"$elemMatch": value} else: diff --git a/tests/queryset/queryset.py b/tests/queryset/queryset.py index 0999a2d6..4a05f6e8 100644 --- a/tests/queryset/queryset.py +++ b/tests/queryset/queryset.py @@ -3604,6 +3604,9 @@ class QuerySetTest(unittest.TestCase): ak = list(Bar.objects(foo__match={'shape': "square", "color": "purple"})) self.assertEqual([b1], ak) + ak = list(Bar.objects(foo__elemMatch={'shape': "square", "color": "purple"})) + self.assertEqual([b1], ak) + ak = list(Bar.objects(foo__match=Foo(shape="square", color="purple"))) self.assertEqual([b1], ak)