模块:Mongoid::Positional

包含在:
Association::Embedded::BatchableContextual::MemoryPersistable
定义于:
lib/mongoid/positional.rb

Overview

该模块负责获取更新选择器,并在适当的情况下切换 $ 位置操作符的索引。

实例方法摘要折叠

实例方法详细信息

#位置(选择器, 操作, 已处理 = {}) ⇒哈希

注意:

我们能够准确知道何时使用位置操作符的唯一时间是在我们要持久化某些内容的确切时间。 因此,我们可以通过发送的选择器判断是否实际上可以使用位置操作符。 示例,如果选择器是:{ “ _id ” => 1 },那么我们就不能使用位置操作符来更新嵌入式文档,因为永远不会有匹配项 — 我们会根据选择器进入的级别深度,并且如果ID值不为零。

采用提供的选择器和原子操作,并在需要时用位置操作符替换嵌入式文档的索引。

例子:

处理操作。

positionally(
  { "_id" => 1, "addresses._id" => 2 },
  { "$set" => { "addresses.0.street" => "hobrecht" }}
)

参数:

  • 选择器 (哈希)

    选择器。

  • 操作 (哈希)

    更新操作。

  • 已处理 哈希 (默认为: {}

    已处理的更新操作。

返回:

  • (哈希)

    新操作。



34
35
36
37
38
39
40
41
# File 'lib/mongoid/positional.rb', line 34

def 按位置(选择器, 操作, 已处理 = {})
  if 选择器.size == 1 || 选择器.values.任何? { |val| val.nil? }
    return 操作
  end
  密钥 = 选择器.密钥.map{ |m| m.('._id',' ') } - ['_id']
  密钥 = 密钥.sort_by { |s| s.长度*-1 }
  process_operations(密钥, 操作, 已处理)
end