Module: Mongoid::Contextual::Aggregable::MongoEx::ClassMethods

Defined in:
lib/mongoid/contextual/aggregable/mongo_ex.rb

Instance Method Summary collapse

Instance Method Details

#aggregates(field = nil) ⇒ Hash

Get all the aggregate values for the provided field.

Examples:

Get all the aggregate values.

aggregable.aggregates(:likes)

Parameters:

  • field (String, Symbol) (defaults to: nil)

    The field name.

Returns:

  • (Hash)

    The aggregate values in the form:

    "count" => 2.0,
    "max" => 1000.0,
    "min" => 500.0,
    "sum" => 1500.0,
    "avg" => 750.0
    

Since:

  • 3.0.0



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/mongoid/contextual/aggregable/mongo_ex.rb', line 30

def aggregates(field = nil)
  if (field.present?)
    if query.count > 0
      result = collection.aggregate(pipeline(field)).to_a
      if result.empty?
        {"count" => query.count, "avg" => 0, "sum" => 0}
      else
        result.first
      end
    else
      {"count" => 0}
    end
  else
    Aggregates.new(self)
  end
end

#avg(field) ⇒ Float

Get the average value of the provided field.

Examples:

Get the average of a single field.

aggregable.avg(:likes)

Parameters:

  • field (Symbol)

    The field to average.

Returns:

  • (Float)

    The average.

Since:

  • 3.0.0



57
58
59
# File 'lib/mongoid/contextual/aggregable/mongo_ex.rb', line 57

def avg(field)
  aggregates(field)["avg"]
end

#max(field = nil) ⇒ Float, Document

Get the max value of the provided field. If provided a block, will return the Document with the greatest value for the field, in accordance with Ruby’s enumerable API.

Examples:

Get the max of a single field.

aggregable.max(:likes)

Get the document with the max value.

aggregable.max do |a, b|
  a.likes <=> b.likes
end

Parameters:

  • field (Symbol) (defaults to: nil)

    The field to max.

Returns:

  • (Float, Document)

    The max value or document with the max value.

Since:

  • 3.0.0



79
80
81
# File 'lib/mongoid/contextual/aggregable/mongo_ex.rb', line 79

def max(field = nil)
  block_given? ? super() : aggregates(field)["max"]
end

#min(field = nil) ⇒ Float, Document

Get the min value of the provided field. If provided a block, will return the Document with the smallest value for the field, in accordance with Ruby’s enumerable API.

Examples:

Get the min of a single field.

aggregable.min(:likes)

Get the document with the min value.

aggregable.min do |a, b|
  a.likes <=> b.likes
end

Parameters:

  • field (Symbol) (defaults to: nil)

    The field to min.

Returns:

  • (Float, Document)

    The min value or document with the min value.

Since:

  • 3.0.0



101
102
103
# File 'lib/mongoid/contextual/aggregable/mongo_ex.rb', line 101

def min(field = nil)
  block_given? ? super() : aggregates(field)["min"]
end

#sum(field = nil) ⇒ Float

Get the sum value of the provided field. If provided a block, will return the sum in accordance with Ruby’s enumerable API.

Examples:

Get the sum of a single field.

aggregable.sum(:likes)

Get the sum for the provided block.

aggregable.sum(&:likes)

Parameters:

  • field (Symbol) (defaults to: nil)

    The field to sum.

Returns:

  • (Float)

    The sum value.

Since:

  • 3.0.0



119
120
121
# File 'lib/mongoid/contextual/aggregable/mongo_ex.rb', line 119

def sum(field = nil)
  block_given? ? super() : aggregates(field)["sum"] || 0
end