web-dev-qa-db-ja.com

モンゴイドで凝集

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"}})

だから私はそれがモンゴイドの問題だと思っています...これについてのどんな言葉も素晴らしいでしょう!

17
neon

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])
31
yacc

現時点では、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 を参照してください。

12
mgadda