From 225c31d5834158bd02c653ac24874fa083adec2a Mon Sep 17 00:00:00 2001 From: David Bordeynik Date: Sat, 14 Feb 2015 18:40:24 +0200 Subject: [PATCH] Fix #766: Add support for operator --- docs/changelog.rst | 1 + mongoengine/queryset/transform.py | 2 +- tests/queryset/transform.py | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index b5bf486c..e70fc8e3 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,7 @@ Changelog Changes in 0.9.X - DEV ====================== +- Add support for $type operator # 766 - Fix tests for pymongo 2.8+ #877 - No module named 'django.utils.importlib' (Django dev) #872 - Field Choices Now Accept Subclasses of Documents diff --git a/mongoengine/queryset/transform.py b/mongoengine/queryset/transform.py index 83bd9f8e..be78c411 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', 'elemMatch') + 'all', 'size', 'exists', 'not', 'elemMatch', 'type') GEO_OPERATORS = ('within_distance', 'within_spherical_distance', 'within_box', 'within_polygon', 'near', 'near_sphere', 'max_distance', 'geo_within', 'geo_within_box', diff --git a/tests/queryset/transform.py b/tests/queryset/transform.py index 48e01919..2d5261f2 100644 --- a/tests/queryset/transform.py +++ b/tests/queryset/transform.py @@ -197,5 +197,17 @@ class TransformTest(unittest.TestCase): update = transform.update(Location, set__poly={"type": "Polygon", "coordinates": [[[40, 5], [40, 6], [41, 6], [40, 5]]]}) self.assertEqual(update, {'$set': {'poly': {"type": "Polygon", "coordinates": [[[40, 5], [40, 6], [41, 6], [40, 5]]]}}}) + def test_type(self): + class Doc(Document): + df = DynamicField() + Doc(df=True).save() + Doc(df=7).save() + Doc(df="df").save() + self.assertEqual(Doc.objects(df__type=1).count(), 0) # double + self.assertEqual(Doc.objects(df__type=8).count(), 1) # bool + self.assertEqual(Doc.objects(df__type=2).count(), 1) # str + self.assertEqual(Doc.objects(df__type=16).count(), 1) # int + + if __name__ == '__main__': unittest.main()