类:Mongoid::Criteria
- 继承:
-
对象
- 对象
- Mongoid::Criteria
- 包括:
- Enumerable、Inspectable、 Mongoid::Clients::Options 、 Mongoid::Clients::Sessions 、 Contextual 、 Findable 、 Includable 、 Marshalable 、 Modifier 、 Options 、 Queryable 、 Scopable
- 定义于:
- lib/mongoid/criteria.rb ,
lib/mongoid/criteria/options.rb,
lib/mongoid/criteria/findable.rb,
lib/mongoid/criteria/scopable.rb,
lib/mongoid/criteria/queryable.rb,
lib/mongoid/criteria/includable.rb,
lib/mongoid/criteria/modifier.rb,
lib/mongoid/criteria/permission.rb,
lib/mongoid/criteria/translator.rb,
lib/mongoid/criteria/marshalable.rb,
lib/mongoid/criteria/queryable/key.rb,
lib/mongoid/criteria/queryable/smash.rb,
lib/mongoid/criteria/queryable/options.rb,
lib/mongoid/criteria/queryable/Optional.rb,
lib/mongoid/criteria/queryable/ 管道.rb,
lib/mongoid/criteria/queryable/selector.rb,
lib/mongoid/criteria/queryable/storable.rb,
lib/mongoid/criteria/queryable/macroable.rb,
lib/mongoid/criteria/queryable/mergeable.rb,
lib/mongoid/criteria/queryable/aggregable.rb,
lib/mongoid/criteria/queryable/expandable.rb,
lib/mongoid/criteria/queryable/selectable.rb,
lib/mongoid/criteria/queryable/extensions/ 设立.rb,
lib/mongoid/criteria/queryable/extensions/date.rb,
lib/mongoid/criteria/queryable/extensions/hash.rb,
lib/mongoid/criteria/queryable/extensions/time.rb,
lib/mongoid/criteria/queryable/extensions/ 大量.rb,
lib/mongoid/criteria/queryable/extensions/ 范围.rb,
lib/mongoid/criteria/queryable/extensions/ 对象.rb,
lib/mongoid/criteria/queryable/extensions/regexp.rb,
lib/mongoid/criteria/queryable/extensions/string.rb,
lib/mongoid/criteria/queryable/extensions/symbol.rb,
lib/mongoid/criteria/queryable/extensions/boolean.rb,
lib/mongoid/criteria/queryable/extensions/numeric.rb,
lib/mongoid/criteria/queryable/extensions/date_time.rb,
lib/mongoid/criteria/queryable/extensions/nil_class.rb,
lib/mongoid/criteria/queryable/extensions/big_decimal.rb,
lib/mongoid/criteria/queryable/extensions/time_with_zone.rb
Overview
Criteria 类是 Mongoid 中从数据库检索对象所需的核心对象。它是一种 DSL,本质上是设置选择器和选项参数,而这些参数会传递给 Ruby 驱动程序中的 Mongo::集合。Criteria 上的每个方法都会返回 self,它们可以链接起来,以创建要针对数据库执行的可读条件。
在命名空间下定义
模块: 可 查找 、可 包含、可编组 、 可修改 、 选项 、 权限 、可 查询、作用域 、 转换器
常量摘要折叠
- ALLOWED_FROM_HASH_METHODS =
支持 from_hash 方法以防止任意方法执行。仅允许查询构建方法,不允许执行或修改方法。
%i[ 所有 all_in all_of 和 any_in any_of asc ascending batch_size between 排序规则 comment cursor_type desc descending elem_match eq 存在 附加功能 geo_spatial GROUP gt gte 提示 in 包括 limit lt lte max_distance max_scan max_time_ms 合并(merge) mod ne 接近 near_sphere nin no_timeout 无 none_of 也不 not not_in 偏移量 only or 来自一个购物车应用的order文档, order_by 项目 原始 读 重新排序 作用域 跳过 slice snapshot text_search 类型 未限定作用域 Unwind WHERE with_size with_type 没有 ].冻结
- CHECK =
用于检查方法缺失的静态大量- 我们只需要实例化一次。
[]
实例属性摘要折叠
-
#_raw_results ⇒ nil | Hash
private
一个内部助手,用于在给定条件对象上获取/设置“原始”标志。
-
#关联⇒ 对象
返回属性关联的值。
-
# 个documents ⇒ Array<Document>
从嵌入式条件中获取文档。
-
# embedded "> 对象
返回嵌入属性的值。
-
# klass ⇒ 对象
返回属性 klass 的值。
-
#parent_document ⇒ 对象
返回属性“parent_document”的值。
可修改的属性
#create_attrs , #create_attrs 创建文档时添加到文档的其他属性。
Queryable中包含的属性
#aliases , #aliases 别名。 、 #serializers 、 #serializers 序列化器。
Queryable::Optional中包含的属性
Queryable::Aggregable 中包含的属性
#aggregating , #aggregating 标志我们是否正在聚合。 , # 管道 , # 管道聚合管道。
Queryable::Mergeable中包含的属性
#strategy , #strategy 当前策略的名称。
类方法摘要折叠
-
。from_hash(hash) ⇒ 条件
已弃用
已弃用。
此方法已弃用,并将在未来发布中删除。
实例方法摘要折叠
-
# == (other) ⇒ true | false
如果提供的
Enumerable或Criteria等于此Criteria或条件本身的结果,则返回 true。 - #_enumerable_find ⇒ Object private
- # _findable_find ⇒ 对象 private
-
#as_json(options = nil) ⇒ String
需要正确获取 JSON 格式的条件。
-
# embedded? ⇒ true | false
是嵌入式文档的标准吗?
-
# empty_and_chainable? ⇒ true | false
条件是空的但可链接的条件吗?
-
#extract_id ⇒ 对象
从提供的条件中提取单个 ID。
-
#extras(extras) ⇒ Criteria
向
Criteria添加一个条件,以指定要传递给 Ruby 驱动程序的其他选项,格式与驱动程序完全相同。 -
# field_list ⇒ Array<String>
获取包含字段的列表。
-
# find (*args) {|Object| ... } ⇒ 文档 | Array<Document> | nil
在给定提供的_id值的情况下查找一个或多个文档,或者根据需要在加载文档后过滤应用程序进程空间中当前范围内的文档。
- # for_js ( JavaScript , scope = {}) ⇒ 条件 已弃用 已弃用。
-
#freeze ⇒ Criteria
冻结条件时,我们需要先初始化上下文,否则在尝试迭代时设置上下文将引发运行时错误。
-
#initialize(klass) ⇒ Criteria
构造函数
初始化新条件。
-
# merge (other) ⇒ Criteria
将另一个对象与此
Criteria合并并返回一个新条件。 -
# merge! (其他)→ 标准
将其他条件合并到此条件中。
-
#none ⇒ Criteria
返回始终包含零个结果且从不访问数据库的条件。
-
# only (*args) ⇒ 条件
已重写以在字段中包含 _type。
- #Raise_eager_error(is_eager_load, klass, relation) ⇒ 对象
-
#raw(raw_results = true, typed: nil) ⇒ 条件
生成当前条件对象的克隆,并将其“原始”设置设立给定值。
-
#raw_results? ⇒ true | false
回答以下问题的谓词:此条件对象当前是否处于原始模式?(有关原始模式的说明,请参阅#raw。)。
-
# read (value = nil) ⇒ Criteria
设置条件的读取偏好(read preference)。
-
# respond_to? (name, include_private = false) ⇒ true | false
如果条件响应给定方法,则返回 true。
- #to_criteria ⇒ Criteria 已弃用 已弃用。
-
#to_proc ⇒ Proc
将条件转换为过程。
-
# type (types) ⇒ 条件
向
Criteria添加一个条件,用于指定必须匹配的类型或类型数组。 -
#typecast_results? ⇒ true | false
回答以下问题的谓词:此条件对象返回的结果是否应该进行类型转换?(有关说明,请参阅 #raw。)除非#raw_results,否则回答毫无意义?为 true,因为如果返回实例化文档对象,则它们将始终进行类型转换。
-
# where (*args) ⇒ 条件
这是大多数MongoDB查询的一般入口点。
-
# without (*args) ⇒ 条件
已覆盖以从字段中排除_id 。
-
# without_options ⇒ 条件
获取此条件的不带选项的版本。
Mongoid::Clients::Sessions 中包含的方法
Mongoid::Clients::Options中包含的方法
# 集合 , #collection_name , #mongo_client , #persistence_context , #persistence_context? , #with
Scopeable 中包含的方法
#apply_default_scope 、 #apply_scope 、 #remove_scoping 、 #scoped 、 #scoped? 、# scoping_options 、 #scoping_options= 、# unscoped 、# unscoped? , #with_default_scope
Modified中包含的方法
# 构建 , #create , #create! 、 #create_with 、 #find_or_create_by 、 #find_or_create_by! 、 #find_or_initialize_by 、 #first_or_create 、 #first_or_create! , #first_or_initialize
包含在封送处理中的方法
从Includable包含的方法
#eager_load、#includes、#inclusions、#inclusions=、#use_lookup?
Findable 中包含的方法
#execute_or_rise 、 #for_ids 、 #multiple_from_db
Queryable中包含的方法
Queryable::Optional中包含的方法
#ascending , #batch_size , #collation , #comment , #cursor_type , #descending , forwardables , #hint , #limit , #max_scan , #max_time_ms , #no_timeout , #order_by , #reorder , #skip , #slice , # 快照
Queryable::Macroable 中包含的方法
Selectable中包含的方法
Queryable::Aggregable 中包含的方法
#aggregating? 、 #group 、 #project 、 #unwind
Queryable::Mergeable中包含的方法
#and_with_operator 、 #intersect 、 #override 、 #reset_strategies! , #union
Queryable::Storable中包含的方法
#add_field_expression 、 #add_logic_operator_expression 、 #add_one_expression 、 #add_operator_expression
上下文中包含的方法
构造函数详情
#initialize(klass) ⇒ Criteria
初始化新条件。
323 324 325 326 327 328 |
# File 'lib/mongoid/criteria.rb', 第323行 def 初始化(klass) @klass = klass @embedded = nil @none = nil klass ? 超(klass.aliased_fields, klass.字段, klass.关系, klass.aliased_associations) : 超({}, {}, {}, {}) end |
动态方法处理
此类通过method_missing方法处理动态方法
# method_missing ⇒对象(私有)
用于在条件所属的Document上的类方法的 for 中将Criteria作用域链接在一起。
619 620 621 622 623 624 625 626 627 628 629 |
# File 'lib/mongoid/criteria.rb', 第619行 ruby2_keywords def method_missing(名称, *args, 和块) if klass.respond_to?(名称) klass.发送(:with_scope, self) do klass.发送(名称, *args, 和块) end elsif CHECK.respond_to?(名称) 条目.发送(名称, *args, 和块) else 超 end end |
实例属性详细信息
#_raw_results ⇒ nil | Hash
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
一个内部助手,用于在给定条件对象上获取/设置“原始”标志。
244 245 246 |
# File 'lib/mongoid/criteria.rb', 第244行 def _raw_results @_raw_results end |
#关联⇒对象
返回属性关联的值。
100 101 102 |
# File 'lib/mongoid/criteria.rb', 第100行 def 关联 @association end |
#documents ⇒ Array<Document>
从嵌入式条件中获取文档。
183 184 185 |
# File 'lib/mongoid/criteria.rb', 第183行 def 文档 @documents ||= [] end |
# embedded ">对象
返回嵌入属性的值。
100 101 102 |
# File 'lib/mongoid/criteria.rb', 第100行 def @embedded end |
#klass ⇒ Object
返回属性 klass 的值。
100 101 102 |
# File 'lib/mongoid/criteria.rb', 第100行 def klass @klass end |
#parent_document ⇒对象
返回属性“parent_document”的值。
100 101 102 |
# File 'lib/mongoid/criteria.rb', 第100行 def parent_document @parent_document end |
类方法详细信息
。 from_hash (hash) ⇒条件
此方法已弃用,并将在未来发布中删除。
将给定的哈希值转换为条件。将遍历哈希中的每个键,这些键必须对应于条件对象上允许的方法。哈希可以包括指定条件的model类的“klass”键。
81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/mongoid/criteria.rb', 第81行 def from_hash(哈希) 条件 = 条件.new(哈希.删除(:klass) || 哈希.删除('klass')) 哈希.each_pair do |方法, args| method_sym = 方法.to_sym 除非 ALLOWED_FROM_HASH_METHODS.包括?(method_sym) 提高 ArgumentError, " Method '#{method}' is not allowed in from_hash " end 条件 = 条件.public_send(method_sym, args) end 条件 end |
实例方法详细信息
# == (other) ⇒ true | false
如果传递了可枚举值,则在调用时将强制加载数据库。
如果提供的Enumerable或Criteria等于此Criteria或条件本身的结果,则返回 true。
110 111 112 113 114 |
# File 'lib/mongoid/criteria.rb', 第110行 def ==(其他) return 超 if 其他.respond_to?(:selector) 条目 == 其他 end |
#_enumerable_find ⇒ Object
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
24 |
# File 'lib/mongoid/criteria.rb', 第24行 别名 _enumerable_find find |
# _findable_find ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
31 |
# File 'lib/mongoid/criteria.rb', 第31行 别名 _findable_find find |
#as_json(options = nil) ⇒ String
需要正确获取 JSON 格式的条件
173 174 175 |
# File 'lib/mongoid/criteria.rb', 第173行 def as_json( = nil) 条目.as_json() end |
# embedded? ⇒ true | false
条件是否为嵌入式文档?
202 203 204 |
# File 'lib/mongoid/criteria.rb', 第202行 def !!@embedded end |
# empty_and_chainable? ⇒ true | false
条件是空的但可链接的条件吗?
394 395 396 |
# File 'lib/mongoid/criteria.rb', 第394行 def empty_and_chainable? !!@none end |
#extract_id ⇒对象
从提供的条件中提取单个 ID。 可能位于 $and 查询或直接 _id 查询中。
272 273 274 |
# File 'lib/mongoid/criteria.rb', 第272行 def Extract_id 选择器['_id'] || 选择器[:_id] || 选择器[' ID '] || 选择器[:id] end |
#extras(extras) ⇒ Criteria
向Criteria添加一个条件,以指定要传递给 Ruby 驱动程序的其他选项,格式与驱动程序完全相同。
riteria.extras(:limit => 20 , :skip => 40 )
285 286 287 288 289 |
# File 'lib/mongoid/criteria.rb', 第285行 def 附加功能(附加功能) Crit = 克隆 Crit..合并!(附加功能) Crit end |
# field_list ⇒ Array<String>
获取包含字段的列表。
297 298 299 300 301 302 303 |
# File 'lib/mongoid/criteria.rb', 第297行 def field_list if [:fields] [:fields].密钥.拒绝 { |key| key == klass.discriminator_key } else [] end end |
#find(*args) {|Object| ... } ⇒ Document | Array<Document> | nil
每个参数都可以是单独的 ID、ID 数组或嵌套数组。 每个数组都将被展平。
在给定提供的_id值的情况下查找一个或多个文档,或者根据需要在加载文档后过滤应用程序进程空间中当前范围内的文档。
如果此方法未获得区块,则会委托给 Findable#find 并根据所提供的_id值查找一个或多个document。
如果为该方法提供了一个区块,则它会委托给 Enumerable#find 并返回当前 Criteria对象找到的第一个 document,而该区块会为其返回真值。
请注意,Mongoid 不会对 Enumerable 的“默认过程”参数进行特殊处理 - 委托给 Findable 与 Enumerable 之间的决定仅取决于是否向 find 传递了区块。
157 158 159 160 161 162 163 |
# File 'lib/mongoid/criteria.rb', 第157行 def find(*args, 和块) if block_given? _enumerable_find(*args, 和块) else _findable_find(*args) end end |
# for_js ( JavaScript , scope = {}) ⇒条件
按提供的 JavaScript 和范围查找 document。使用 $where,但与 Criteria#where 不同,因为它将向查询传递一个代码对象,而不是一个纯字符串。可安全抵御 Javascript 注入攻击。
553 554 555 556 557 558 559 560 561 |
# File 'lib/mongoid/criteria.rb', 第553行 def for_js(Javascript, 范围 = {}) 代码 = if 范围.空? # 从MongoDB 4.4开始,$where 不支持 CodeWithScope BSON::代码.new(Javascript) else BSON::CodeWithScope.new(Javascript, 范围) end js_query(代码) end |
#freeze ⇒ Criteria
冻结条件时,我们需要先初始化上下文,否则在尝试迭代时设置上下文将引发运行时错误。
313 314 315 |
# File 'lib/mongoid/criteria.rb', 第313行 def 冻结 上下文 和 包含 和 超 end |
# merge (other) ⇒ Criteria
将另一个对象与此Criteria合并并返回一个新条件。 另一个对象可能是Criteria或Hash 。 这用于将多个作用域组合在一起,其中可能需要链式作用域情况。
351 352 353 354 355 |
# File 'lib/mongoid/criteria.rb', 第351行 def 合并(merge)(其他) Crit = 克隆 Crit.合并!(其他) Crit end |
# merge! (其他)→标准
将其他条件合并到此条件中。
365 366 367 368 369 370 371 372 373 374 375 |
# File 'lib/mongoid/criteria.rb', 第365行 def 合并!(其他) 其他 = self.class.from_hash(其他) if 其他.is_a?(哈希) 选择器.合并!(其他.选择器) .合并!(其他.) self.文档 = 其他.文档.dup 除非 其他.文档.空? self. = 其他. self.包含 = (包含 + 其他.包含).uniq self._raw_results = _raw_results || 其他._raw_results @use_lookup ||= 其他.use_lookup? self end |
# none ⇒条件
返回始终包含零个结果且从不访问数据库的条件。
384 385 386 |
# File 'lib/mongoid/criteria.rb', 第384行 def 无 @none = true 和 self end |
# only (*args) ⇒条件
已重写以在字段中包含 _type。
406 407 408 409 410 411 412 413 |
# File 'lib/mongoid/criteria.rb', 第406行 def only(*args) args = args.展平 return 克隆 if args.空? args.unshift(:_id) if (args 和 字段::IDS).空? args.推动(klass.discriminator_key.to_sym) if klass.会遗传吗? 超 end |
# Raise_eager_error (is_eager_load, klass, relation) ⇒ 对象
115 116 117 118 119 120 121 |
# File 'lib/mongoid/criteria/includable.rb', line 115 def Raise_eager_error(is_eager_load, klass, 关系) if is_eager_load 提高 ArgumentError, " 预先加载仅支持 #{ klass } 上关联名称的参数 " end 提高 Errors::InvalidIncludes.new(klass, [ 关系 ]) end |
#raw(raw_results = true, typed: nil) ⇒ 条件
生成当前条件对象的克隆,并将其“原始”设置设立给定值。设立为“raw”的条件将以原始哈希值形式返回所有结果。如果 typed 为 true,则哈希中的值将根据其对应的字段进行类型转换。
当未设立“raw”时(或 raw_results 为 false)时,该条件将以实例化 Document 实例的形式返回所有结果。
224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/mongoid/criteria.rb', 第224行 def 原始(raw_results = true, 输入: nil) # 当raw_results 为 false 时,typed 的默认值为 true;当 #raw_results 为 true。 typed = !raw_results if typed.nil? 提高 ArgumentError, ' 实例化结果必须进行类型转换 ' if !typed && !raw_results 克隆.点击 do |条件| 条件._raw_results = { 原始: raw_results, 输入: typed } end end |
#raw_results? ⇒ true | false
回答以下问题的谓词:此条件对象当前是否处于原始模式?(有关原始模式的说明,请参阅 #raw。)
250 251 252 |
# File 'lib/mongoid/criteria.rb', 第250行 def raw_results? _raw_results && _raw_results[:raw] end |
# read (value = nil) ⇒ Criteria
设置条件的读取偏好(read preference)。
423 424 425 426 427 |
# File 'lib/mongoid/criteria.rb', 第423行 def 读(值 = nil) 克隆.点击 do |条件| 条件..合并!(读取: 值) end end |
# respond_to? (name, include_private = false) ⇒ true | false
如果条件响应给定方法,则返回 true。
451 452 453 |
# File 'lib/mongoid/criteria.rb', 第451行 def respond_to?(名称, include_private = false) 超 || klass.respond_to?(名称) || CHECK.respond_to?(名称, include_private) end |
#to_criteria ⇒ Criteria
为想要合并到条件中的对象提供了便利。
464 465 466 |
# File 'lib/mongoid/criteria.rb', 第464行 def to_criteria self end |
# to_proc ⇒ Proc
将条件转换为过程。
475 476 477 |
# File 'lib/mongoid/criteria.rb', 第475行 def to_proc -> { self } end |
# type (types) ⇒条件
向Criteria添加一个条件,用于指定必须匹配的类型或类型数组。
489 490 491 |
# File 'lib/mongoid/criteria.rb', 第489行 def 类型(类型) any_in(discriminator_key.to_sym => 阵列(类型)) end |
#typecast_results? ⇒ true | false
回答以下问题的谓词:此条件对象返回的结果是否应该进行类型转换?(有关说明,请参阅 #raw。)除非#raw_results,否则回答毫无意义?为 true,因为如果返回实例化文档对象,则它们将始终进行类型转换。
261 262 263 |
# File 'lib/mongoid/criteria.rb', 第261行 def typecast_results? _raw_results && _raw_results[:typed] end |
# where (*args) ⇒条件
这是大多数 MongoDB 查询的一般入口点。 这会创建一个标准字段:值选择和使用哈希方法扩展的选择,或者如果提供了string ,则创建 $where 选择。
510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 |
# File 'lib/mongoid/criteria.rb', 第510行 def WHERE(*args) # 从历史上看,该方法只需要一个参数。 # 从 https://jira.mongodb.org/browse/MONGOID-{0 4804开始 它还接受 # zero arguments. # Super 调用的根本的where实施支持 # 任意数量的参数,但目前不允许多个 # 通过此方法传递的参数。 可以在以下内容中重新考虑此 API: #future. 提高 ArgumentError, " Criteria#where 需要零个或一个参数(给定#{ args . length } ) " if args.长度 > 1 if args.长度 == 1 表达式(expression) = args.first 提高 Errors::UnsupportedJavascript.new(klass, 表达式(expression)) if 表达式(expression).is_a?(::字符串) && end 超 end |
# without (*args) ⇒条件
已覆盖以从字段中排除_id 。
437 438 439 440 |
# File 'lib/mongoid/criteria.rb', 第437行 def 没有(*args) args -= id_fields 超 end |
# without_options ⇒ 条件
获取此条件的不带选项的版本。
533 534 535 536 537 |
# File 'lib/mongoid/criteria.rb', 第533行 def Crit = 克隆 Crit..清除 Crit end |