Группировать результаты и суммировать поля в одном запросе с Mongoid? - PullRequest
0 голосов
/ 25 января 2011

Я пытаюсь выполнить более или менее сложный запрос с Mongoid, который в основном получает метрики для диапазона дат, группирует их по дням, а затем суммирует значения для каждого дня, он также должен сказать мне, сколько существует записей для каждый день.

Я очень сомневаюсь, что это можно сделать с активной записывающей частью Mongoid, но я не знаю, как напрямую выполнять запросы к драйверу mongo.

Моя модель:

class Metric
  include Mongoid::Document

  field :id_session,    :type => Integer
  field :metric,        :type => Integer
  field :value,         :type => Integer
  field :date,          :type => Date
  field :time,          :type => Time

  validates_numericality_of :value
  validates_presence_of :id_session, :metric, :value

  before_create :set_date

  def set_date
    self.time   = Time.now
    self.date   = Date.now
  end

end

Мне удалось получить результаты, сгруппированные по дате, просто с помощью Metric.distinct (: date), но я не знаю, как составить сумму и подсчитать эти результаты, так как я не могу использовать этот метод по результатам.

Есть идеи? Я предпочитаю оставаться в пределах активных методов записи Mongoid, но если кто-нибудь знает, как я могу выполнять запросы непосредственно в драйвере MongoDB, это тоже поможет.

Спасибо!

1 Ответ

0 голосов
/ 25 января 2011

удалось заставить его работать

    result = Metric.collection.group(
  ['date'] , nil, {:count => 0, :value => 0}, "function(x, y) { y.count++; y.value += x.value }"
)

Кредиты переходят к ответу на этой странице

...