2012-07-31 91 views
1

目前,我有我的緯度/長在我的MongoDB數據庫不同的領域,但如果我想要做的地理空間搜索我需要他們在這個格式:更新MongoDB的文件地理空間搜索

{ location : [ 50 , 30 ] } 

通過按照上面的說明,我可以將每個文檔的緯度/長鍵的值轉換爲新的關鍵點?

TIA!

+1

讀出舊文檔,翻轉數值,寫出結果。不要忘記你更新了哪些。我錯過了什麼嗎? – 2012-07-31 01:24:45

+0

是的,沒錯。只是想知道如何。這篇文章似乎覆蓋它:http://stackoverflow.com/questions/3788256/mongodb-updating-documents-using-data-from-the-same-document/3792958#3792958 – occasl 2012-07-31 17:15:13

回答

1

您將不得不遍歷所有沒有location字段的文檔並添加它(可能刪除lat/long字段,除非這會破壞您的應用程序)。

db.mycollection.find({ location : { $exists : false } }).forEach(
    function (doc) { 
     // Add (lon, lat) pairs .. order is important 
     doc.location = { lon: doc.lon, lat: doc.lat }; 

     // Remove old properties 
     delete doc.lon; 
     delete doc.lat; 

     // Save the updated document 
     db.mycollection.save(doc); 
    } 
) 

注意,MongoDB的geospatial indexing順序應該是您的文檔(經度,緯度)的一致。

+0

當然這是轉置...什麼會你叫它?我想改變數據的形狀而不是實際值(即變形)。我得到如何找到文檔,但我不確定迭代的機制...是地圖減少功能還是什麼? – occasl 2012-07-31 16:37:35

+0

@occasl:你是對的,移調是一個合適的術語..我推斷別的。將副本映射/減少到一個新的輸出集合,所以如果你想迭代一個forEach是適當的。修改了示例以包含更新。 – Stennie 2012-07-31 21:50:52

+0

謝謝...這就是我最終做的。 – occasl 2012-08-01 17:58:38