我想更新一个包含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我可以这样做吗?
答案 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)))}} )