2011-12-10 20 views
0

作爲一個新手,我一直試圖讓我的rails應用程序中的geoNear命令工作,它似乎工作正常。對我來說主要的煩惱是它返回一個數組的字符串而不是鍵,我可以調用它來提取數據。是否有可能將Mongo GeoNear命令(使用Ruby/Rails)返回的數組轉換爲Plucky對象?

挖了一遍,我知道MongoMapper使用Plucky將查詢結果轉換爲友好的對象,可以很容易地處理,但我一直無法找到如何將我的geoNear查詢的結果轉換爲勇敢的對象。

我的問題是: (a)是否有可能將它變成一個刺耳的物體,我該怎麼做? (b)如果不可能,我怎樣才能最簡單和系統地提取每個記錄和每個字段?

這裏是查詢在我的控制器

@mult = 3963 * (3.14159265/180) # Scale to miles on earth 
@results = @db.command({'geoNear' => "places", 'near'=> @search.coordinates , 'distanceMultiplier' => @mult, 'spherical' => true}) 

這裏是我恢復(爲了簡明,刪除文檔內容)

{"ns"=>"myapp-development.places", "near"=>"1001110101110101100100110001100010100010000010111010", "results"=>[{"dis"=>0.04356444023196527, "obj"=>{"_id"=>BSON::ObjectId('4ee6a7d210a81f05fe000001'),...}}], "stats"=>{"time"=>0, "btreelocs"=>0, "nscanned"=>1, "objectsLoaded"=>1, "avgDistance"=>0.04356444023196527, "maxDistance"=>0.00063}, "ok"=>1.0} 

幫助是非常讚賞的對象!

+0

我有現在同樣的問題,我還沒有解決但是,如果可以的話,我一定會提出答案。 – lashleigh

+0

你可以發佈查詢的Ruby代碼以及結果嗎? –

+0

對不起,延遲 - 現在附上代碼示例。謝謝 –

回答

0

好了,所以可以說你的結果存儲到一個變量稱爲places_near:

places_near = t.command({'geoNear' => "places", 'near'=> [50,50] , 'distanceMultiplier' => 1, 'spherical' => true})

該命令返回具有映射到結果查詢列表的鍵(結果)的哈希值。返回的文件看起來是這樣的:

{ 
    "ns": "test.places", 
    "near": "1100110000001111110000001111110000001111110000001111", 
    "results": [ 
    { 
     "dis": 69.29646421910687, 
     "obj": { 
      "_id": ObjectId("4b8bd6b93b83c574d8760280"), 
      "y": [ 
      1, 
      1 
      ], 
      "category": "Coffee" 
     } 
    }, 
    { 
     "dis": 69.29646421910687, 
     "obj": { 
      "_id": ObjectId("4b8bd6b03b83c574d876027f"), 
      "y": [ 
      1, 
      1 
      ] 
     } 
    } 
    ], 
    "stats": { 
     "time": 0, 
     "btreelocs": 1, 
     "btreelocs": 1, 
     "nscanned": 2, 
     "nscanned": 2, 
     "objectsLoaded": 2, 
     "objectsLoaded": 2, 
     "avgDistance": 69.29646421910687 
    }, 
    "ok": 1 
} 

遍歷迴應只是想迭代,你會在過度紅寶石任何列表:

places_near['results'].each do |result| 
    # do stuff with result object 
end 
+0

感謝您的回覆。我實際上最終採用了這種方法,但這個刺耳的點符號具有一些視覺吸引力,這正是我試圖獲得的 –

相關問題