pymongo更新位置数据

时间:2014-04-27 18:18:26

标签: python mongodb dictionary geolocation

我想更新一个包含lat,lng values的数组。我在下面给出了来自python的更新查询。

client.mydb.mycoll.update({"_id":123},{'$push':{"loc":{"lng":77.77,"lat":12.12}}} )

该系列在" loc"中已经有了一些价值。数组如下

{ "_id" : 123, "loc" : [    {   "lng" : 77.6104193,     "lat" : 12.9264116 } ], "name" : "myname" }

更新查询的问题在于它存储了新的" loc"元素为

  

{" _id" :123," loc" :[{" lng" :77.6104193," lat" :12.9264116},{" lat":12.12," lng":77.77}]," name" :" myname" }

我需要按顺序存储loc数据" lng"然后" lat"。之后,我可以使用$ near运算符进行查询({loc:{$ near:[77.77,12.12]}})。python dictionary总是存储按照排序的键值对key.how我可以这样做吗?

2 个答案:

答案 0 :(得分:1)

我建议稍微更改结构以匹配MongoDB manual

中的结构
coordinates : [ <longitude> , <latitude> ]

所以你最终得到这样的东西:

{ "_id" : 123, "loc" : [ [77.6104193, 12.9264116], [77.77, 12.12] ], "name" : "myname" }

MongoDB保持数组的顺序,但不保证保留对象字段(See this answer to a similar question)的顺序。

答案 1 :(得分:1)

经过一些研究后,我在python doc中找到了OrderedDict

from collections import OrderedDict

client.mydb.mycoll.update({"_id":123},{'$push':{"loc":OrderedDict((("lng",77.77),("lat":12.12)))}} )