2014-04-27 113 views
1

我想更新包含lat,lng values.my的數組,下面給出python的更新查詢。pymongo更新位置數據

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

收集已經在「祿」數組某個值如下

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

與更新查詢的問題是,它存儲了新的「祿」元素作爲

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

我需要按照「lng」順序存儲loc數據,然後使用「lat」.so以後,我可以使用$ near操作符({loc:{$ near:[77.77,12.12]}})來查詢。字典總是存儲按key.how排序的鍵值對,我能做到嗎?

回答

1

經過一番研究,我在python doc中發現了OrderedDict

from collections import OrderedDict 

client.mydb.mycoll.update({"_id":123},{'$push':{"loc":OrderedDict((("lng",77.77),("lat":12.12)))}}) 
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)。

+0

我不能那樣做,因爲表中已經有數據使用php代碼了。我正在從php轉到python – sajith