类: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::Collection。 Criteria
上的每个方法都会返回 self,它们可以链接起来,以创建要针对数据库执行的可读条件。
在命名空间下定义
模块: 可 查找 、可 包含、可编组 、 可修改 、 选项 、 权限 、可 查询、作用域 、 转换器
常量摘要折叠
- CHECK =
用于检查方法缺失的静态大量- 我们只需要实例化一次。
[]
实例属性摘要折叠
-
#关联⇒ 对象
返回属性关联的值。
-
# 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 格式的条件。
-
# 个documents ⇒ Array<Document>
从嵌入式条件中获取文档。
-
# documents= ( Docs ) ⇒ Array<Document>
根据条件设置嵌入式文档。
-
# 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。
-
# read (value = nil) ⇒ Criteria
设置条件的读取偏好(read preference)。
-
# respond_to? (name, include_private = false) ⇒ true | false
如果条件响应给定方法,则返回 true。
- #to_criteria ⇒ Criteria 已弃用 已弃用。
-
#to_proc ⇒ Proc
将条件转换为过程。
-
# type (types) ⇒ 条件
向
Criteria
添加一个条件,用于指定必须匹配的类型或类型数组。 -
# 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包含的方法
#includes 、 #inclusions 、 #inclusions=
Findable 中包含的方法
#execute_or_rise 、 #for_ids 、 #multiple_from_db
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
初始化新条件。
233 234 235 236 237 238 |
# File 'lib/mongoid/criteria.rb', 第233行 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
作用域链接在一起。
530 531 532 533 534 535 536 537 538 539 540 |
# File 'lib/mongoid/criteria.rb', 第530行 ruby2_keywords def method_missing(名称, *args, 和块) if klass.respond_to?(名称) klass.发送(:with_scope, self) do klass.发送(名称, *args, 和块) end elsif CHECK.respond_to?(名称) return 条目.发送(名称, *args, 和块) else 超 end end |
实例属性详细信息
#关联⇒对象
返回属性关联的值。
68 69 70 |
# File 'lib/mongoid/criteria.rb', 第68行 def 关联 @association end |
# embedded ">对象
返回嵌入属性的值。
68 69 70 |
# File 'lib/mongoid/criteria.rb', 第68行 def @embedded end |
#klass ⇒ Object
返回属性 klass 的值。
68 69 70 |
# File 'lib/mongoid/criteria.rb', 第68行 def klass @klass end |
#parent_document ⇒对象
返回属性“parent_document”的值。
68 69 70 |
# File 'lib/mongoid/criteria.rb', 第68行 def parent_document @parent_document end |
类方法详细信息
实例方法详细信息
# == (other) ⇒ true | false
如果传递了可枚举值,则在调用时将强制加载数据库。
如果提供的Enumerable
或Criteria
等于此Criteria
或条件本身的结果,则返回 true。
78 79 80 81 |
# File 'lib/mongoid/criteria.rb', 第78行 def ==(其他) return 超 if 其他.respond_to?(:selector) 条目 == 其他 end |
#_enumerable_find ⇒ Object
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
26 |
# File 'lib/mongoid/criteria.rb', 第26行 别名 :_enumerable_find :find |
# _findable_find ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
33 |
# File 'lib/mongoid/criteria.rb', 第33行 别名 :_findable_find :find |
#as_json(options = nil) ⇒ String
需要正确获取 JSON 格式的条件
140 141 142 |
# File 'lib/mongoid/criteria.rb', 第140行 def as_json( = nil) 条目.as_json() end |
#documents ⇒ Array<Document>
从嵌入式条件中获取文档。
150 151 152 |
# File 'lib/mongoid/criteria.rb', 第150行 def 文档 @documents ||= [] end |
#documents=(docs) ⇒ Array<Document>
根据条件设置嵌入式文档。
161 162 163 |
# File 'lib/mongoid/criteria.rb', 第161行 def documents=(docs) @documents = docs end |
# embedded? ⇒ true | false
条件是否为嵌入式文档?
171 172 173 |
# File 'lib/mongoid/criteria.rb', 第171行 def !!@embedded end |
# empty_and_chainable? ⇒ true | false
条件是空的但可链接的条件吗?
301 302 303 |
# File 'lib/mongoid/criteria.rb', 第301行 def empty_and_chainable? !!@none end |
#extract_id ⇒对象
从提供的条件中提取单个 ID。 可能位于 $and 查询或直接 _id 查询中。
182 183 184 |
# File 'lib/mongoid/criteria.rb', 第182行 def Extract_id 选择器['_id'] || 选择器[:_id] || 选择器[' ID '] || 选择器[:id] end |
#extras(extras) ⇒ Criteria
向Criteria
添加一个条件,以指定要传递给 Ruby 驱动程序的其他选项,格式与驱动程序完全相同。
riteria.extras(:limit => 20 , :skip => 40 )
195 196 197 198 199 |
# File 'lib/mongoid/criteria.rb', 第195行 def 附加功能(附加功能) Crit = 克隆 Crit..合并!(附加功能) Crit end |
# field_list ⇒ Array<String>
获取包含字段的列表。
207 208 209 210 211 212 213 |
# File 'lib/mongoid/criteria.rb', 第207行 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值查找一个或多个文档。
如果为该方法提供了区块,则它会委托给Enumerable#find并返回当前 Crieria对象找到的第一个文档,并且该区块会为其返回真值。
请注意,Mongoid 不会对 Enumerable 的“默认过程”参数进行特殊处理 - 委托给Findable
与Enumerable
之间的决定仅取决于是否向find
传递了区块。
124 125 126 127 128 129 130 |
# File 'lib/mongoid/criteria.rb', 第124行 def find(*args, 和块) if block_given? _enumerable_find(*args, 和块) else _findable_find(*args) end end |
# for_js ( JavaScript , scope = {}) ⇒条件
按提供的 JavaScript 和范围查找文档。 使用 $where,但与Criteria#where不同,它将向查询传递一个代码对象,而不是一个纯string 。 可安全抵御JavaScript注入攻击。
466 467 468 469 470 471 472 473 474 |
# File 'lib/mongoid/criteria.rb', 第466行 def for_js(Javascript, 范围 = {}) 代码 = if 范围.空? # 从MongoDB 4.4开始,$where 不支持 CodeWithScope BSON::代码.new(Javascript) else BSON::CodeWithScope.new(Javascript, 范围) end js_query(代码) end |
#freeze ⇒ Criteria
冻结条件时,我们需要先初始化上下文,否则在尝试迭代时设置上下文将引发运行时错误。
223 224 225 |
# File 'lib/mongoid/criteria.rb', 第223行 def 冻结 上下文 和 包含 和 超 end |
# merge (other) ⇒ Criteria
将另一个对象与此Criteria
合并并返回一个新条件。 另一个对象可能是Criteria
或Hash
。 这用于将多个作用域组合在一起,其中可能需要链式作用域情况。
260 261 262 263 264 |
# File 'lib/mongoid/criteria.rb', 第260行 def 合并(merge)(其他) Crit = 克隆 Crit.合并!(其他) Crit end |
# merge! (其他)→标准
将其他条件合并到此条件中。
274 275 276 277 278 279 280 281 282 |
# File 'lib/mongoid/criteria.rb', 第274行 def 合并!(其他) 其他 = self.class.from_hash(其他) if 其他.is_a?(哈希) 选择器.合并!(其他.选择器) .合并!(其他.) self.文档 = 其他.文档.dup 除非 其他.文档.空? self. = 其他. self.包含 = (包含 + 其他.包含).uniq self end |
# none ⇒条件
返回始终包含零个结果且从不访问数据库的条件。
291 292 293 |
# File 'lib/mongoid/criteria.rb', 第291行 def 无 @none = true 和 self end |
# only (*args) ⇒条件
覆盖以在字段中包含 _type。
313 314 315 316 317 318 319 320 321 322 323 |
# File 'lib/mongoid/criteria.rb', 第313行 def only(*args) args = args.展平 return 克隆 if args.空? if (args 和 字段::IDS).空? args.unshift(:_id) end if klass.会遗传吗? args.推动(klass.discriminator_key.to_sym) end 超(*args) end |
# read (value = nil) ⇒ Criteria
设置条件的读取偏好(read preference)。
333 334 335 336 337 |
# File 'lib/mongoid/criteria.rb', 第333行 def 读(值 = nil) 克隆.点击 do |条件| 条件..合并!(读取: 值) end end |
# respond_to? (name, include_private = false) ⇒ true | false
如果条件响应给定方法,则返回 true。
361 362 363 |
# File 'lib/mongoid/criteria.rb', 第361行 def respond_to?(名称, include_private = false) 超 || klass.respond_to?(名称) || CHECK.respond_to?(名称, include_private) end |
#to_criteria ⇒ Criteria
为想要合并到条件中的对象提供了便利。
374 375 376 |
# File 'lib/mongoid/criteria.rb', 第374行 def to_criteria self end |
# to_proc ⇒ Proc
将条件转换为过程。
385 386 387 |
# File 'lib/mongoid/criteria.rb', 第385行 def to_proc ->{ self } end |
# type (types) ⇒条件
向Criteria
添加一个条件,用于指定必须匹配的类型或类型数组。
399 400 401 |
# File 'lib/mongoid/criteria.rb', 第399行 def 类型(类型) any_in(self.discriminator_key.to_sym => 阵列(类型)) end |
# where (*args) ⇒条件
这是大多数 MongoDB 查询的一般入口点。 这会创建一个标准字段:值选择和使用哈希方法扩展的选择,或者如果提供了string ,则创建 $where 选择。
420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 |
# File 'lib/mongoid/criteria.rb', 第420行 def WHERE(*args) # 从历史上看,该方法只需要一个参数。 # 从 https://jira.mongodb.org/browse/MONGOID-{0 4804开始 它还接受 # zero arguments. # Super 调用的根本的实现支持 # 任意数量的参数,但目前不允许多个 # 通过此方法传递的参数。 可以在以下内容中重新考虑此 API: #future. if args.长度 > 1 提高 ArgumentError, " Criteria#where 需要零个或一个参数(给定#{ args . length } ) " end if args.长度 == 1 表达式(expression) = args.first if 表达式(expression).is_a?(::字符串) && 提高 Errors::UnsupportedJavascript.new(klass, 表达式(expression)) end end 超 end |
# without (*args) ⇒条件
覆盖以从字段中排除_id 。
347 348 349 350 |
# File 'lib/mongoid/criteria.rb', 第347行 def 没有(*args) args -= id_fields 超(*args) end |
# without_options ⇒ 条件
获取此条件的不带选项的版本。
446 447 448 449 450 |
# File 'lib/mongoid/criteria.rb', 第446行 def Crit = 克隆 Crit..清除 Crit end |