17

MongoDB には新しい集約フレームワークがあり、それを Mongoid で使用する方法を見つけようとしています。ここで説明されているように、この機能を備えた Moped のブランチがあるようです。MongoDB 2.2 に更新し、この Moped のブランチを次のようにアプリにインストールしようとしました。

gem 'moped', git: 'git://github.com/mongoid/moped.git', ブランチ: 'aggregation-support'

しかし、集計はまだ機能していません。これは私がそれをテストするために使用している呼び出しです:

= Post.all.aggregate({ "$group" => { "_id" => "$_id" } })

アップデート

mongo シェルでは、次のように動作します。

db.users.aggregate({ $group : { _id : "$_id" }})

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

4

2 に答える 2

31

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])
于 2013-03-21T18:16:45.323 に答える
13

現時点では、mongoid は Moped が公開する以外の追加の構文を提供していません。Moped (マスターを指す) を Gemfile に含める場合は、Moped の集計サポートをテストできます。

gem 'moped', :git => 'git://github.com/mongoid/moped.git'

1.3.0 がリリースされたら、これを pull することを忘れないでgem update mopedください。

それが整ったら、次のようにクエリを実行できます。

 Post.collection.aggregate({ "$group" => { "_id" => "$_id" } })

詳細については、Moped の変更ログを参照してください。

于 2012-09-25T21:34:38.873 に答える