类:Mongoid::Attributes::Projector Private

继承:
对象
  • 对象
显示全部
定义于:
lib/mongoid/attributes/projector.rb

Overview

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

该模块定义投影助手。

投影规则并非无足轻重。 请参阅www.mongodb.com/zh-cn/docs/manual/reference/method/db。 集合.find/#find-projection 以获取服务器文档。 4.4服务器(可能还有所有较旧的服务器)要求内容字段的投影要么是排除性的,要么是包含性的,即不能在同一查询中混合排除和包含。 但是,可以在包含内容字段的投影中排除_id 。 截至撰写本文时,除0和1之外的整数投影值没有正式记录;请参阅 DOCSP- 15266 。 除了点表示法之外, 4.4服务器还允许嵌套哈希投影规范,我认为 Mongoid 尚无法处理此问题。

实例属性摘要折叠

实例方法摘要折叠

构造函数详情

#初始化(投影) ⇒投影器

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

返回 Projector 的新实例。



24
25
26
27
28
29
30
31
32
33
# File 'lib/mongoid/attributes/projector.rb', line 24

def 初始化(投影)
  if 投影
    @content_projection = 投影.dup
    @content_projection.删除('_id')
    @id_projection_value = 投影['_id']
  else
    @content_projection = nil
    @id_projection_value = nil
  end
end

实例属性详细信息

# content_projection对象(只读)

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



36
37
38
# File 'lib/mongoid/attributes/projector.rb', line 36

def content_projection
  @content_projection
end

# id_projection_value对象(只读)

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



35
36
37
# File 'lib/mongoid/attributes/projector.rb', line 35

def id_projection_value
  @id_projection_value
end

实例方法详细信息

#attribute_or_path_allowed? (name) ⇒ true | false

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

确定已配置的投影(如果有)是否支持指定的属性或点表示法路径。

如果没有配置的投影,则返回 true。

参数:

  • 名称 ( string )

    属性名称或点表示法路径。

返回:

  • ( true | false )

    投影是否允许该属性。



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/mongoid/attributes/projector.rb', line 48

def attribute_or_path_allowed?(名称)
  # 对_id的特殊处理。
  if 名称 == '_id'
    结果 = 除非 id_projection_value.nil?
      value_inclusionary?(id_projection_value)
    else
      true
    end
    return 结果
  end

  if content_projection.nil?
    # 无投影(而不是空投影)。
    # 允许使用所有属性。
    return true
  end

  # 查找与请求的名称/路径匹配或是其父项的项。
  # 这会处理以下情况:示例,投影为
  # {foo: true},我们想知道是否允许 foo.bar。
  列项,  = content_projection.检测 do |路径, |
    (名称 + '  ').start_with?(路径 + '  ')
  end
  if 列项
    return value_inclusionary?()
  end

  if content_inclusionary?
    # 查找作为请求名称/路径的严格子项的项目。
    # 这会处理以下情况:示例,投影为
    # {"foo.bar" => true},我们想知道是否允许使用 foo。
    #(它是一个条形图的容器。)
    列项,  = content_projection.检测 do |路径, |
      (路径 + '  ').start_with?(名称 + '  ')
    end
    if 列项
      return true
    end
  end

  !content_inclusionary?
end