2011-12-10 1 views
0

전체 초보자로서 geoNear 명령을 내 레일 응용 프로그램에서 작동 시키려고 노력했으며 정상적으로 작동하는 것처럼 보입니다. 나를 괴롭히는 것은 데이터를 꺼내기 위해 호출 할 수있는 키가 아닌 문자열로 배열을 반환한다는 것입니다.Mongo GeoNear 명령 (Ruby/Rails 사용)에서 반환 된 배열을 Plucky 객체로 변환 할 수 있습니까?

MongoMapper는 Plucky를 사용하여 쿼리 결과를 쉽게 처리 할 수있는 친숙한 개체로 변환하지만 내 geoNear 쿼리의 결과를 쉽게 변환 할 수있는 방법을 찾지 못했음을 알고 있습니다. plucky 개체.

내 질문은 다음과 같습니다. (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} 

도움이 많이 감사합니다 (문서 단순 제거 내용으로) 다시 받고 있어요 객체 내 컨트롤러에서 쿼리입니다!

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

이 명령은 쿼리에 대한 결과 목록에 매핑되는 키 (결과)가있는 해시를 반환

+0

내가 지금 같은 문제가 있습니다를, 나는 해결되지 아직 가능하지만 가능한 한 확실한 답변을 드리겠습니다. – lashleigh

+0

쿼리에 대한 Ruby 코드와 그 결과를 게시 할 수 있습니까? –

+0

지연에 대해 죄송합니다 - 코드 샘플이 첨부되었습니다. 감사합니다 –

답변

0

좋아, 그래서 당신은 변수에라는 places_near을 결과를 저장 말할 수 있습니다. 반환 된 문서는 다음과 같습니다

{ 
    "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

귀하의 response.I 주셔서 감사합니다 실제로 결국이 접근 방식으로 갔지만 plucky 점 표기법 내가 얻으려고했던 어떤 시각적 인 매력을했다 –