模块:Mongoid::Shardable

扩展方式:
ActiveSupport::Concern
包含在:
可组合
定义于:
lib/mongoid/shardable.rb

Overview

此模块包含在更新中添加分片键字段的行为。

在命名空间下定义

模块: 类方法

实例方法摘要折叠

实例方法详细信息

# shard_key_field_value (字段, prefer_persisted:) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回指定分分片键的值。 如果该字段标识嵌入式文档,则会对该键进行解析并递归求值。 如果 'prefer_persisted' 为 true,则无论该属性的当前值是什么,都将返回最后保存到数据库的值。

参数:

  • 字段 ( string )

    要评估的字段的名称

  • prefer_persisted ( true|false )

    是否优先选择持久值而不是当前值。

返回:

  • ( Object )

    已命名字段的值。



96
97
98
99
100
101
102
103
104
105
# File 'lib/mongoid/shardable.rb', line 96

def shard_key_field_value(字段, prefer_persisted:)
  if 字段.包括?(" . ")
    关系, 剩余 = 字段.拆分(" . ", 2)
    发送(关系)&。shard_key_field_value(剩余, prefer_persisted: prefer_persisted)
  elsif prefer_persisted && !new_record?
    attribute_was(字段)
  else
    发送(字段)
  end
end

# shard_key_fieldsArray<String>

注意:

通过使用委托进行重构以提高类加载性能。

获取分分片键字段。

例子:

获取分分片键字段。

model.shard_key_fields

返回:

  • ( Array<String> )

    分片键字段名称。



47
48
49
# File 'lib/mongoid/shardable.rb', line 47

def shard_key_fields
  self.class.shard_key_fields
end

# shard_key_selector (prefer_persisted: false) ⇒哈希

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回与定义的分片键匹配的选择器。 如果 'prefer_persisted' 为 false(默认值),则使用指定分片键的当前值,否则,它将尝试使用最近持久保存的值。

参数:

  • prefer_persisted ( true | false ) (默认为: false

    是使用分分片键字段的当前值,还是使用最近保留的值。

返回:

  • (哈希)

    分片键选择器。



63
64
65
66
67
# File 'lib/mongoid/shardable.rb', line 63

def shard_key_selector(prefer_persisted: false)
  shard_key_fields.each_with_object({}) do |字段, 选择器|
    选择器[字段.to_s] = shard_key_field_value(字段.to_s, prefer_persisted: prefer_persisted)
  end
end

# shard_key_selector_in_db哈希

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回与数据库中此文档的现有版本匹配的选择器。

如果文档未持久化,则此方法将使用分片分片键字段的当前值。 如果文档是持久保存的,则此方法将使用从数据库中检索到的值。

返回:

  • (哈希)

    分片键选择器。



79
80
81
# File 'lib/mongoid/shardable.rb', line 79

def shard_key_selector_in_db
  shard_key_selector(prefer_persisted: true)
end