模块:Mongoid::Contextual::Aggregable::Memory

包含在:
内存
定义于:
lib/mongoid/contextual/aggregable/memory.rb

Overview

包含聚合内存中的值的行为。

实例方法摘要折叠

实例方法详细信息

#aggregates (字段) ⇒哈希

获取所提供字段的所有聚合值。 用于实现与 Aggregable::Mongo 的接口一致性。

参数:

  • 字段 ( string | Symbol )

    字段名称。

返回:

  • (哈希)

    包含聚合值的哈希。 如果不存在任何文档,则返回的哈希将包含0的计数、总和以及 nil 的 max、min、avg。



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

def 聚合(字段)
  %w(数数 总和 avg min Max).each_with_object({}) do |方法, 哈希|
    哈希[方法] = 发送(方法, 字段)
  end
end

# avg (field) ⇒数值

获取所提供字段的平均值。

例子:

获取单个字段的平均值。

aggregable.avg(:likes)

参数:

  • 字段 (符号)

    要求平均值的字段。

返回:

  • (数值)

    平均值。



32
33
34
35
36
37
38
# File 'lib/mongoid/contextual/aggregable/memory.rb', line 32

def avg(字段)
  总计 = 数数 { |doc| !doc.发送(字段).nil? }
  return nil 除非 总计 > 0

  总计 = 总计.to_f if 总计.is_a?(整型)
  总和(字段) / 总计
end

# max (field = nil) ⇒数值 |文档

获取所提供字段的最大值。 如果提供了区块,则根据 Ruby 的可枚举API ,返回具有该字段最大值的文档。

例子:

获取单个字段的最大值。

aggregable.max(:likes)

获取具有最大值的文档。

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

参数:

  • 字段 符号 (默认为: nil

    字段最大值。

返回:

  • (数值 |文档)

    最大值或具有最大值的文档。



56
57
58
59
60
# File 'lib/mongoid/contextual/aggregable/memory.rb', line 56

def Max(字段 = nil)
  return () if block_given?

  aggregate_by(字段, :max)
end

# min (字段 = nil) ⇒数值 |文档

获取所提供字段的最小值。 如果提供了一个区块,则根据 Ruby 的可枚举 API,返回具有该字段的最小值的文档。

例子:

获取单个字段的最小值。

aggregable.min(:likes)

获取具有最小值的文档。

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

参数:

  • 字段 符号 (默认为: nil

    要最小化的字段。

返回:

  • (数值 |文档)

    最小值或具有最小值的文档。



78
79
80
81
82
# File 'lib/mongoid/contextual/aggregable/memory.rb', line 78

def min(字段 = nil)
  return () if block_given?

  aggregate_by(字段, :min)
end

#sum (field = nil) ⇒数值

获取所提供字段的总和值。 如果提供了区块,则会根据 Ruby 的可枚举API返回总和。

例子:

获取单个字段的总和。

aggregable.sum(:likes)

获取所提供区块的总和。

aggregable.sum(&:likes)

参数:

  • 字段 (符号 | 数字) (默认为: nil

    要求和的字段,或给定区块时求和的初始值。

返回:

  • (数值)

    总和值。



97
98
99
100
101
# File 'lib/mongoid/contextual/aggregable/memory.rb', line 97

def 总和(字段 = nil)
  return (字段 || 0) if block_given?

  aggregate_by(字段, :sum) || 0
end