I am using Pymongo to access Mongo db. I want to search for all people nearby a specified location with name contains a string. For example, I want to search all people nearby [105.0133, 21.3434] and name contains ‘Mark’. So I write the query like this:
db.users.find({ "location.coords": { "$nearSphere": [105.0133, 21.3434], "$maxDistance": 10/EARTH_RADIUS }, "name": "/Mark/" })
(I have an index “location.coords” in my “users” collection)
The query works fine in Mongodb console, but while execute by Pymongo, the dictionary being re-sort like this:
{ "name": "/Mark/", "location.coords": { "$nearSphere": [105.0133, 21.3434], "$maxDistance": 10/EARTH_RADIUS } }
(The “name” key is before “location.coords”, that is not what I expected – also Mongodb expected)
That causes Mongodb cannot understand the query and returns no results. Can anyone help me to figure out how to force the Pymongo does not re-sort my dictionary.
Thanks and regards
The dictionary type is inherently orderless. From the python documentation:
If you want to index your dictionary in a specific order, you’ll have to store your order somehow. One easy way to do this is to keep your keys in a list, like:
You also might want to investigate:
Unfortunately if you need more help than that, you’ll need to provide more details of your situation.