2010-01-24 4 views
4

블로그 게시물을 설명하는 횟수와 함께 연/월 조합 목록을 가져 오려고합니다. 아이디어는 그들이과 같이 표시 될 것입니다 :이 얻을 관리해야 Ruby 드라이버를 사용하는 MongoDB 그룹

2010

  • 1월 (1 개 포스트)
  • 2009년 12월 (2 게시물)
  • ... MongoDB의 JS 쉘을 사용하여 작업하고 유용한 형식으로 결과를 반환합니다 :

    db.posts.group({ 
        keyf: function(x){ 
             return { 
               month: x.datetime.getMonth(), 
               year:x.datetime.getFullYear() 
             }; 
        }, 
        reduce: function(x,y){ y.count++ }, 
        initial:{count:0} 
    }) 
    

    결과 :

    [ { "month" : 0, "year" : 2010, "count" : 3 }, 
        { "month" : 0, "year" : 1970, "count" : 1 } ] 
    

    이것은 정확히 내가 한 것입니다. 그러나이를 루비 드라이버에 적합한 코드로 변환하려고 시도 할 수는 없습니다. (나는 따라서 Post.collection을 MongoMapper을 사용하고) 나는 문서를 살펴 보았다 나의 이해에서, 다음과 같은 결과를 얻을해야합니다

    @archive = Post.collection.group(
        "function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }", 
        nil, { :count => 0 }, 'function(x,y){y.count++}', true) 
    

    대신 유용한 데이터의 좋은 배열을 돌려주는, 내가 ' (! 소스 코드에 대한 이해) : m이 엉망이 점점

    { 
        "function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }" => nil, 
        "count" => 4.0 
    } 
    

    그 중 하나가 완전히 자신의 문서를 무시하는 것 같다 또는 여기 기본적인 뭔가를 놓친 거지. 나는 머리카락을 거의 꺼내고있다.

답변

2

꽤 이상한 행동입니다. 방금 코드를 로컬에서 실행했는데 모든 것이 작동했습니다. 드라이버 버전 0.18.2를 사용하고 있는지 확인할 수 있습니까? 그렇다면 설치가 유일한 버전인지 확인하십시오 (정상 상태 확인과 동일).

나는 그것이 어떤 차이를 만들어야한다고 생각하지 않지만 나는 몽고 매퍼에서 #group을 실행하지 않고 있었다. 나는 보석만을 사용했다. 너도 그걸 시도해 볼거야. 다음은 내가 실행 한 코드입니다.

require 'rubygems' 
require 'mongo' 

d = Mongo::Connection.new.db('blog') 
c = d['post'] 

p c.group("function(x) { return { month: x.date.getMonth(), year:x.date.getFullYear() }; }", 
    nil, 
    { :count => 0 }, 
    "function(x,y){y.count++}", 
    true) 
+0

버전을 확인했으며 0.18과 0.18.2를 설치했습니다. 나는 이전 버전을 삭제하고 MongoMapper (내가 0.18에 의존했던 버전)를 업데이트했다. 문제는 여전히 지속됩니다. 나는 또한 당신이 한 것처럼 드라이버를 사용하려고 시도했지만 제 경우에는 여전히 실패합니다. 내가 너보다 왜 다르게 행동할지 이해가 안돼? 편집 : 올바른 결과를 얻으므로 자체 스크립트에서이를 시도하십시오. 그것은 내 레일 애플 리케이션 내에서만 실패로 보인다. –

+0

흠. Rails가이 작업에 어떤 영향을 미칠지 모릅니다. 가장 좋은 방법은 나와 MongoMapper 모두에게 실패한 테스트 케이스를 작성하는 것입니다. –

+0

오, 나는 엄청난 기념비적 인 것이 었습니다. 0.18에서 0.18.2 사이의 버전 차이가 있음을 알 수 있습니다. 이전 보석을 제거하고 모든 것을 업데이트 한 후 dev 서버를 다시 시작하는 것을 잊었습니다. 되돌아 가서 github에서 0.18 소스를 보면, 0.18.2에서 keyf 코드에 대한 지원이 추가되고 수정되었다는 것을 알 수 있습니다. 나는 바보 같다고 생각한다. :) –

관련 문제