Rubyドライバーを使用したMongoDBグループに関連
SQLで次のようなことをしたい場合:
select page_id, count(page_id) from a_table group by page_id
MongoDBのドキュメントには
http://api.mongodb.org/ruby/current/Mongo/Collection.html#group-instance_method
group(key, condition, initial, reduce, finalize = nil)
# returns an array
したがって、他の投稿から、私は使用しています:
Analytic.collection.group( "fucntion (x) return {page_id : x.page_id}",
nil,
{:count => 0},
"function(x, y) { y.count++ }" )
しかし実際には
[{"count"=>47.0}]
これは、コレクション内のレコード(ドキュメント)の総数です。上記で何かが正しくありませんか?キーは次のような静的な文字列かもしれないと思いました
http://kylebanker.com/blog/2009/11/mongodb-count-group/
db.pageviews.group(
{
key: {'user.agent': true},
initial: {sum: 0},
reduce: function(doc, prev) { prev.sum += 1}
});
しかし、それは他のstackoverflowポストにはありません。
更新:実際には、上記のリンクで、次のようなソリューション
Analytic.collection.group( ['page_id'], nil,
{:count => 0}, "function(x, y) { y.count++ }" )
は機能しますが、なぜこの投稿の最初の方法が機能しなかったのか疑問に思います。