与Mongoid聚合

neo*_*eon 17 ruby-on-rails mongodb mongoid aggregation-framework

MongoDB有一个新的聚合框架,我试图弄清楚如何将它与Mongoid一起使用.似乎有一个Moped分支具有此处讨论的此功能.我已经更新到MongoDB 2.2并尝试在我的应用程序上安装这个Moped分支,如下所示:

gem'pedped',git:'git://github.com/mongoid/moped.git',branch:'aggregation-support'

但聚合仍然无效.这是我用来测试它的电话:

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

UPDATE

在mongo shell中,这可以工作:

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

所以我认为这是一个Mongoid问题......任何关于这个的话都会很棒!

yac*_*acc 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])
Run Code Online (Sandbox Code Playgroud)


mga*_*dda 12

此时,mongoid没有提供超出Moped曝光的其他语法.如果您愿意在您的Gemfile中包含Moped(指向master),您可以测试Moped对聚合的支持.

gem 'moped', :git => 'git://github.com/mongoid/moped.git'
Run Code Online (Sandbox Code Playgroud)

一旦1.3.0发布,你会想要记住拉动它,只需通过正常路线更新gem update moped.

有了这个,您可以运行您的查询:

 Post.collection.aggregate({ "$group" => { "_id" => "$_id" } })
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Moped 更改日志.