MongoDBには新しい Aggregation Framework があり、Mongoidでの使用方法を理解しようとしています。説明したように、この機能を備えたMopedのブランチがあるようです ここ 。 MongoDB 2.2に更新し、Mopedのこのブランチを次のようにアプリにインストールしてみました。
gem'moped '、git:' git://github.com/mongoid/moped.git'、branch: 'aggregation-support'
しかし、集約はまだ機能していません。これは私がそれをテストするために使用している呼び出しです:
= Post.all.aggregate({"$ group" => {"_id" => "$ _id"}})
[〜#〜]更新[〜#〜]
Mongo Shellでは、これは機能します。
db.users.aggregate({$ group:{_ id: "$ _id"}})
だから私はそれがモンゴイドの問題だと思っています...これについてのどんな言葉も素晴らしいでしょう!
3.0.1以降、MongoidはMongoDB 2.2を必要とし、新しい集約フレームワークをサポートします。
コレクションでaggregate
を呼び出すことができるようになりました。
project = {"$project" =>
{
"charges" => 1,
"year" => { "$year" => "$created"}, "month" => { "$month" => "$created"},
"week" => { "$week" => "$created"}, "day" => { "$dayOfYear" => "$created"}
}
}
group = { "$group" =>
{ "_id" => {"year"=>"$year", "week"=>"$week"}, "count" => { "$sum" => 1 } }
}
Charge.collection.aggregate([project,group])
現時点では、mongoidはMopedが公開しているもの以外の追加の構文を提供していません。 GemfileにMoped(マスターを指す)を含めたい場合は、Mopedの集約のサポートをテストできます。
gem 'moped', :git => 'git://github.com/mongoid/moped.git'
1.3.0がリリースされたら、これをプルすることを忘れないでください。通常のルートgem update moped
を介して更新してください。
これが整ったら、次のコマンドでクエリを実行できます。
Post.collection.aggregate({ "$group" => { "_id" => "$_id" } })
詳細については、Moped changelog を参照してください。