diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index e88804f9..8257e5f4 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -33,14 +33,14 @@ class Q(object): AND = '&&' OPERATORS = { 'eq': 'this.%(field)s == %(value)s', - 'neq': 'this.%(field)s != %(value)s', + 'ne': 'this.%(field)s != %(value)s', 'gt': 'this.%(field)s > %(value)s', 'gte': 'this.%(field)s >= %(value)s', 'lt': 'this.%(field)s < %(value)s', 'lte': 'this.%(field)s <= %(value)s', 'lte': 'this.%(field)s <= %(value)s', - 'in': 'this.%(field)s.indexOf(%(value)s) != -1', - 'nin': 'this.%(field)s.indexOf(%(value)s) == -1', + 'in': '%(value)s.indexOf(this.%(field)s) != -1', + 'nin': '%(value)s.indexOf(this.%(field)s) == -1', 'mod': '%(field)s %% %(value)s', 'all': ('%(value)s.every(function(a){' 'return this.%(field)s.indexOf(a) != -1 })'), @@ -265,7 +265,7 @@ class QuerySet(object): def _transform_query(cls, _doc_cls=None, **query): """Transform a query from Django-style format to Mongo format. """ - operators = ['neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'mod', + operators = ['ne', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'mod', 'all', 'size', 'exists'] mongo_query = {} @@ -283,7 +283,7 @@ class QuerySet(object): # Convert value to proper value field = fields[-1] - if op in (None, 'neq', 'gt', 'gte', 'lt', 'lte'): + if op in (None, 'ne', 'gt', 'gte', 'lt', 'lte'): value = field.prepare_query_value(value) elif op in ('in', 'nin', 'all'): # 'in', 'nin' and 'all' require a list of values diff --git a/tests/queryset.py b/tests/queryset.py index b6e958a2..d05fac29 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -331,6 +331,15 @@ class QuerySetTest(unittest.TestCase): BlogPost.drop_collection() + # Check the 'in' operator + self.Person(name='user1', age=20).save() + self.Person(name='user2', age=20).save() + self.Person(name='user3', age=30).save() + self.Person(name='user4', age=40).save() + + self.assertEqual(len(self.Person.objects(Q(age__in=[20]))), 2) + self.assertEqual(len(self.Person.objects(Q(age__in=[20, 30]))), 3) + def test_exec_js_query(self): """Ensure that queries are properly formed for use in exec_js. """