Fixed $maxDistance location for geoJSON $near queries with MongoDB 2.6+
Closes #664
This commit is contained in:
		| @@ -3,6 +3,7 @@ from collections import defaultdict | |||||||
| import pymongo | import pymongo | ||||||
| from bson import SON | from bson import SON | ||||||
|  |  | ||||||
|  | from mongoengine.connection import get_connection | ||||||
| from mongoengine.common import _import_class | from mongoengine.common import _import_class | ||||||
| from mongoengine.errors import InvalidQueryError, LookUpError | from mongoengine.errors import InvalidQueryError, LookUpError | ||||||
|  |  | ||||||
| @@ -115,14 +116,21 @@ def query(_doc_cls=None, _field_operation=False, **query): | |||||||
|             if key in mongo_query and isinstance(mongo_query[key], dict): |             if key in mongo_query and isinstance(mongo_query[key], dict): | ||||||
|                 mongo_query[key].update(value) |                 mongo_query[key].update(value) | ||||||
|                 # $maxDistance needs to come last - convert to SON |                 # $maxDistance needs to come last - convert to SON | ||||||
|                 if '$maxDistance' in mongo_query[key]: |                 value_dict = mongo_query[key] | ||||||
|                     value_dict = mongo_query[key] |                 if ('$maxDistance' in value_dict and '$near' in value_dict and | ||||||
|  |                     isinstance(value_dict['$near'], dict)): | ||||||
|  |  | ||||||
|                     value_son = SON() |                     value_son = SON() | ||||||
|                     for k, v in value_dict.iteritems(): |                     for k, v in value_dict.iteritems(): | ||||||
|                         if k == '$maxDistance': |                         if k == '$maxDistance': | ||||||
|                             continue |                             continue | ||||||
|                         value_son[k] = v |                         value_son[k] = v | ||||||
|                     value_son['$maxDistance'] = value_dict['$maxDistance'] |                     if (get_connection().max_wire_version <= 1): | ||||||
|  |                         value_son['$maxDistance'] = value_dict['$maxDistance'] | ||||||
|  |                     else: | ||||||
|  |                         value_son['$near'] = SON(value_son['$near']) | ||||||
|  |                         value_son['$near']['$maxDistance'] = value_dict['$maxDistance'] | ||||||
|  |  | ||||||
|                     mongo_query[key] = value_son |                     mongo_query[key] = value_son | ||||||
|             else: |             else: | ||||||
|                 # Store for manually merging later |                 # Store for manually merging later | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user