2011-12-10 18 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

感谢您的回复。我实际上最终采用了这种方法,但这个刺耳的点符号具有一些视觉吸引力,这正是我试图获得的 –

相关问题