模块:Mongoid::Contextual::Aggregable::Mongo

包含在:
mongo
定义于:
lib/mongoid/contextual/aggregable/ Mongo.rb

Overview

包含在mongo中聚合值的行为。

实例方法摘要折叠

实例方法详细信息

#aggregates (字段) ⇒哈希

获取所提供字段的所有聚合值。

例子:

获取所有聚合值。

aggregable.aggregates(:likes)
# => {
#   "count" => 2.0,
#   "max" => 1000.0,
#   "min" => 500.0,
#   "sum" => 1500.0,
#   "avg" => 750.0
# }

参数:

  • 字段 ( string | Symbol )

    字段名称。

返回:

  • (哈希)

    包含聚合值的哈希。 如果未找到文档,则返回的哈希将包含0的计数、总和以及 nil 的 max、min、avg。



29
30
31
32
33
34
35
36
# File 'lib/mongoid/contextual/aggregable/ Mongo.rb', line 29

def 聚合(字段)
  结果 = 集合.聚合(管道(字段), 会话: _session).to_a
  if 结果.空?
    可聚合::EMPTY_RESULT.dup
  else
    结果.first
  end
end

# avg (字段) ⇒浮点

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

例子:

获取单个字段的平均值。

aggregable.avg(:likes)

参数:

  • 字段 (符号)

    要求平均值的字段。

返回:

  • (浮点)

    平均值。



46
47
48
# File 'lib/mongoid/contextual/aggregable/ Mongo.rb', line 46

def avg(字段)
  聚合(字段)[" avg "]
end

# max (字段 = nil) ⇒ Float |文档

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

例子:

获取单个字段的最大值。

aggregable.max(:likes)

获取具有最大值的文档。

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

参数:

  • 字段 符号 (默认为: nil

    字段最大值。

返回:

  • ( Float | Document )

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



66
67
68
# File 'lib/mongoid/contextual/aggregable/ Mongo.rb', line 66

def Max(字段 = nil)
  block_given? ? () : 聚合(字段)[" max "]
end

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

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

例子:

获取单个字段的最小值。

aggregable.min(:likes)

获取具有最小值的文档。

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

参数:

  • 字段 符号 (默认为: nil

    要最小化的字段。

返回:

  • ( Float | Document )

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



86
87
88
# File 'lib/mongoid/contextual/aggregable/ Mongo.rb', line 86

def min(字段 = nil)
  block_given? ? () : 聚合(字段)["min"]
end

#sum (字段 = nil) ⇒浮点

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

例子:

获取单个字段的总和。

aggregable.sum(:likes)

获取所提供区块的总和。

aggregable.sum(&:likes)

参数:

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

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

返回:

  • (浮点)

    总和值。



103
104
105
106
107
# File 'lib/mongoid/contextual/aggregable/ Mongo.rb', line 103

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

  聚合(字段)[" sum "] || 0
end