17

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

宝石'轻便摩托车',git:'git://github.com/mongoid/moped.git',分支:'聚合支持'

但聚合仍然不起作用。这是我用来测试它的调用:

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

更新

在 mongo shell 中,这是有效的:

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

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

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 公开的额外语法。如果您愿意在 Gemfile 中包含 Moped(指向 master),则可以测试 Moped 对聚合的支持。

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

你要记得在 1.3.0 发布后拉取它,然后通过gem update moped.

有了它,您可以使用以下命令运行查询:

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

有关更多信息,请参阅助力车变更日志

于 2012-09-25T21:34:38.873 回答