From 3364e040c83412444dd19c00f714d33c27a0e526 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Tue, 22 Jan 2013 16:05:44 +0000 Subject: [PATCH] Ensure $maxDistance is always the last part of the query (#179) --- mongoengine/queryset/transform.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mongoengine/queryset/transform.py b/mongoengine/queryset/transform.py index 5707cecb..71f12e37 100644 --- a/mongoengine/queryset/transform.py +++ b/mongoengine/queryset/transform.py @@ -1,5 +1,7 @@ from collections import defaultdict +from bson import SON + from mongoengine.common import _import_class from mongoengine.errors import InvalidQueryError, LookUpError @@ -123,6 +125,16 @@ def query(_doc_cls=None, _field_operation=False, **query): elif key in mongo_query: if key in mongo_query and isinstance(mongo_query[key], dict): mongo_query[key].update(value) + # $maxDistance needs to come last - convert to SON + if '$maxDistance' in mongo_query[key]: + value_dict = mongo_query[key] + value_son = SON() + for k, v in value_dict.iteritems(): + if k == '$maxDistance': + continue + value_son[k] = v + value_son['$maxDistance'] = value_dict['$maxDistance'] + mongo_query[key] = value_son else: # Store for manually merging later merge_query[key].append(value)