Module: Mongoid::Contextual::Aggregable::Memory

Included in:
Memory
Defined in:
lib/mongoid/contextual/aggregable/memory.rb

Overview

Contains behaviour for aggregating values in memory.

Instance Method Summary collapse

Instance Method Details

#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



18
19
20
# File 'lib/mongoid/contextual/aggregable/memory.rb', line 18

def avg(field)
  count > 0 ? sum(field).to_f / count.to_f : nil
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



40
41
42
# File 'lib/mongoid/contextual/aggregable/memory.rb', line 40

def max(field = nil)
  block_given? ? super() : aggregate_by(field, :max_by)
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



62
63
64
# File 'lib/mongoid/contextual/aggregable/memory.rb', line 62

def min(field = nil)
  block_given? ? super() : aggregate_by(field, :min_by)
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



80
81
82
83
84
85
86
# File 'lib/mongoid/contextual/aggregable/memory.rb', line 80

def sum(field = nil)
  if block_given?
    super()
  else
    count > 0 ? super(0) { |doc| doc.public_send(field) } : 0
  end
end