Совокупность с Мондоидом

MongoDB имеет новую Агрегирующую структуру, и я пытаюсь понять, как ее использовать с Mongoid. Похоже, здесь есть ветвь мопеда с этой функциональностью, как обсуждалось здесь. Я обновил MongoDB 2.2 и попытался установить эту ветвь мопеда в моем приложении следующим образом:

gem 'moped', git: 'git://github.com/mongoid/moped.git', branch: "Агрегацию поддержка"

но агрегация все еще не работает. Это вызов, который я использую для его проверки:

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

UPDATE

В оболочке mongo это работает:

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

поэтому я думаю, что это монгольская проблема... любое слово на этом было бы здорово!

Ответ 1

Начиная с 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])

Ответ 2

В настоящее время mongoid не предоставляет дополнительного синтаксиса, кроме того, что предоставляет Moped. Если вы хотите включить Moped (указав мастер) в свой Gemfile, вы можете проверить поддержку Moped для агрегата.

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

Вы захотите не задумываться об этом, когда выйдет 1.3.0, и просто обновите обычным маршрутом gem update moped.

С помощью этого места вы можете запустить свой запрос с помощью

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

Подробнее см. Мопед changelog.

Ответ 3

db.items.aggregate(
{$match : {amount:{$gt:0},type:{$in:["Single","Double"]}}},
{$group:{_id:type:"$type", month:"$month", year:"$year"},Total_Price:{$sum:"$amount"}},
{$sort:{"_id.month": 1,"_id.year":1}},
{$limit:5}
)

Items.collection.aggregate(
 {"$match"=>{:amount => {'$gt' => 0},:type=>{'$in'=>[Single","Double"]}}},
 {"$group"=>{"_id" => {"type" => "$type", "month"=>"$month","year"=>"$year"},"Total_Price" => {"$sum"=>"$amount"}}},
{"$sort" => {"_id.month" => 1,"_id.year" => 1}},
{"$limit" => 5}
)

follow link может помочь вам написать запрос в mongodb и mongoid query