ブログ投稿を説明するためのカウントを含む年/月の組み合わせのリストを取り戻そうとしています。アイデアは、それらが次のように表示されるということです。
- 2010年1月(1投稿)
- 2009年12月(2件の投稿)
- ..。
私はこれをMongoDBJSシェルを使用して機能させることができ、有用な形式で結果を返します。
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 } ]
これは素晴らしいです、まさに私が求めているものです。しかし、これをrubyドライバーに適したコードに変換しようとすると、動作させることができません。私はドキュメントを見て、私の理解から、以下は同じ結果をもたらすはずです(私はMongoMapperを使用しているので、Post.collection
):
@archive = Post.collection.group(
"function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }",
nil, { :count => 0 }, 'function(x,y){y.count++}', true)
有用なデータの素晴らしい配列を返す代わりに、私はこの混乱を得ています:
{
"function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }" => nil,
"count" => 4.0
}
それはそれ自身のドキュメンテーション(そしてソースコードの私の理解!)に完全に反しているようであるか、私はここで基本的な何かを見逃しているようです。私はほとんど髪を抜いています、どんな助けでもありがたいことに受け入れられました。