MongoDB中的语法:
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'
据我了解,编写上述查询的唯一方法是为轻便摩托车驱动程序安装 gem。所以,我的第一个问题是应该如何在 Gemfile for Rails 4 和 Ruby 2.0 中声明该行?
我假设 moped 中的查询如下所示:
Order.collection.aggregate(
{"$unwind" => "$lines"},
{"$group" => {"_id" => {"sku" => "$lines.sku", desc => "$lines.description"},
qty => {"$sum" => 1}}},
{ "$sort" => { "qty" => -1}})
我想通过单击索引页面上的按钮而不传递参数来显示此查询的结果。第二个问题是我不知道如何更改控制器和索引视图页面以放置一个将调用此查询的按钮。
更新
控制器的索引方法部分如下:
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 %>