Синтаксис в MongoDB:как показывают результаты агрегации на Rails 4
db.orders.aggregate(
{$unwind: "$lines"},
{$group :
{_id: {sku: "$lines.sku", desc: "$lines.description"},
qty : {$sum : 1}}},{ $sort : { qty : -1}}
)
Я хочу, чтобы показать результат выше запроса на Rails.
Я использую Mongoid с Rails 4 и моей Gemfile:
gem 'mongoid', github: 'mongoid/mongoid'
Как я понимаю, единственный способ написать запрос выше, чтобы установить камень для мопеда водителя. Итак, мой 1-й вопрос - как эта строка должна быть объявлена в Gemfile для Rails 4 и Ruby 2.0?
Я предполагаю, что запрос в мопеде будет выглядеть так:
Order.collection.aggregate(
{"$unwind" => "$lines"},
{"$group" => {"_id" => {"sku" => "$lines.sku", desc => "$lines.description"},
qty => {"$sum" => 1}}},
{ "$sort" => { "qty" => -1}})
Я хотел бы показать результаты этого запроса, нажав кнопку на индексной странице без передачи параметров. 2-й вопрос заключается в том, что я не могу понять, как изменить страницу просмотра контроллера и индекса, чтобы поставить кнопку, которая будет вызывать этот запрос.
UPDATE
индексный метод часть контроллера, как показано ниже:
def index
@orders = if params[:search]
Order.search(params[:search]).queryable.asc(:_id).paginate(:page => params[:page], :per_page => 20)
elsif params[:search_from] && params[:search_to]
Order.search_date(params[:search_from], params[:search_to]).queryable.asc(:_id).paginate(:page => params[:page], :per_page => 20)
else
Order.shipping_today(Date.today, Date.today).queryable.asc(:_id).paginate(:page => params[:page], :per_page => 20)
end
index.html.erb:
<h1>Date: <%= Date.today %></h1>
<%= form_tag orders_path, :method => 'get' do %>
<p>Order date range:<br>
<%= text_field_tag :search_from, params[:search_from] %> - <%= text_field_tag :search_to, params[:search_to] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
<%= form_tag orders_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
<%= link_to "Reset", orders_path %>
</p>
<% end %>
<%= form_tag orders_path, :method => 'get' do %>
<p>
<%= submit_tag "Statistics", :name => nil %>
</p>
<% end %>
<div class="digg_pagination">
<div class="page_info">
<%= page_entries_info @orders %>
</div>
<%= will_paginate @orders, :container => false %>
</div>
<br />
<table border = 1 >
<thead>
<tr>
<th>Shipping date</th>
<th>Order #</th>
<th>Ship to name</th>
<th>Tracking #</th>
<th>Shipped</th>
<th>Action</th>
<th></th>
</tr>
</thead>
<tbody>
<% @orders.each do |order| %>
<tr>
<td><%= order.shipping_date %></td>
<td><%= link_to order.order_number, order_path(order) %></td>
<td><%= order.ship_to_fname %></td>
<td><%= order.track_num %></td>
<td><%= order.ship_date %></td>
<td><%= link_to 'Edit', edit_order_path(order) %></td>
<td><%= link_to 'New', new_order_path(order) %></td>
<td><%= link_to 'Destroy', order, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br />
<%= link_to 'New Order', new_order_path %>
Спасибо! Я обновил свой пост с помощью метода индекса, который у меня уже есть. Мой вопрос был не ясен, поэтому я также обновил свой второй вопрос. Я понимаю, что вы показали выше, мне просто интересно, как я буду называть этот запрос, нажав кнопку на странице просмотра индексов, и где в методе индекса я должен поместить код, показанный выше. – Askar
Мне интересно, как это сделать с помощью PostgreSQL –