类: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 =

用于检查方法缺失的静态大量- 我们只需要实例化一次。

[]

实例属性摘要折叠

可修改的属性

#create_attrs , #create_attrs 创建文档时添加到文档的其他属性。

Queryable中包含的属性

#aliases , #aliases 别名。#serializers#serializers 序列化器。

Queryable::Optional中包含的属性

#options , #options查询选项。

Queryable::Aggregable 中包含的属性

#aggregating , #aggregating 标志我们是否正在聚合。 , # 管道 , # 管道聚合管道。

Queryable::Mergeable中包含的属性

#strategy , #strategy 当前策略的名称。

类方法摘要折叠

实例方法摘要折叠

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

包含在封送处理中的方法

#marshal_dump#marshal_load

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 中包含的方法

#key

Selectable中包含的方法

#atomic_selector

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

上下文中包含的方法

#context, #load_async

构造函数详情

#initialize(klass) ⇒ Criteria

初始化新条件。

例子:

初始化新条件。

Criteria.new(Band)

参数:

  • klass ( class )

    模型类。



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作用域链接在一起。

例子:

缺少处理方法。

criteria.method_missing(:name)

参数:

  • 名称 (符号)

    方法名称。

  • *args ( Object... )

    参数。

返回:

  • ( Object )

    方法调用的结果。



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

#klassObject

返回属性 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

类方法详细信息

from_hash (hash) ⇒条件

将给定的哈希值转换为条件。 将遍历哈希中的每个键,这些键必须与条件对象上的方法相对应。 哈希还必须包含“klass”键。

例子:

将哈希转换为条件。

Criteria.from_hash({ klass: Band, where: { name: "Depeche Mode" })

参数:

  • 哈希 (哈希)

    要转换的哈希值。

返回:



55
56
57
58
59
60
61
# File 'lib/mongoid/criteria.rb', 第55行

def from_hash(哈希)
  条件 = 条件.new(哈希.删除(:klass) || 哈希.删除('klass'))
  哈希.each_pair do |方法, args|
    条件 = 条件.__send__(方法, args)
  end
  条件
end

实例方法详细信息

# == (other) ⇒ true | false

注意:

如果传递了可枚举值,则在调用时将强制加载数据库。

如果提供的EnumerableCriteria等于此Criteria或条件本身的结果,则返回 true。

参数:

  • 其他 ( Object )

    要比较的其他EnumerableCriteria

返回:

  • ( true | false )

    如果对象相等。



78
79
80
81
# File 'lib/mongoid/criteria.rb', 第78行

def ==(其他)
  return  if 其他.respond_to?(:selector)
  条目 == 其他
end

#_enumerable_findObject

此方法是私有 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 格式的条件

例子:

获取 JSON 格式的条件。

Person.where(:title => "Sir").as_json

参数:

  • 选项 哈希 (默认为: nil

    要传递给序列化器的选项。

返回:

  • ( string )

    JSON string 。



140
141
142
# File 'lib/mongoid/criteria.rb', 第140行

def as_json(选项 = nil)
  条目.as_json(选项)
end

#documentsArray<Document>

从嵌入式条件中获取文档。

例子:

获取文档。

criteria.documents

返回:



150
151
152
# File 'lib/mongoid/criteria.rb', 第150行

def 文档
  @documents ||= []
end

#documents=(docs) ⇒ Array<Document>

根据条件设置嵌入式文档。

例子:

设置文档。

参数:

  • docs ( Array< Document > )

    嵌入式文档。

返回:

  • ( Array< Document > )

    嵌入式文档。



161
162
163
# File 'lib/mongoid/criteria.rb', 第161行

def documents=(docs)
  @documents = docs
end

# embedded?true | false

条件是否为嵌入式文档?

例子:

条件是否为嵌入式文档?

criteria.embedded?

返回:

  • ( true | false )

    如果条件已嵌入。



171
172
173
# File 'lib/mongoid/criteria.rb', 第171行

def 嵌入式?
  !!@embedded
end

# empty_and_chainable?true | false

条件是空的但可链接的条件吗?

例子:

条件是否为“无”条件?

criteria.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 查询中。

例子:

提取 ID。

criteria.extract_id

返回:

  • ( Object )

    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_listArray<String>

获取包含字段的列表。

例子:

获取字段列表。

criteria.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 的“默认过程”参数进行特殊处理 - 委托给FindableEnumerable之间的决定仅取决于是否向find传递了区块。

例子:

通过_id查找文档,调用 Findable#find。

critera.find("1234")

使用区块查找第一个匹配文档,调用 Enumerable#find。

criteria.find { |item| item.name == "Depeche Mode" }

使用默认Proc 使用区块查找第一个匹配文档,调用 Enumerable#find。

criteria.find(-> { "Default Band" }) { |item| item.name == "Milwaukee Mode" }

尝试查找_id是所提供过程的字符串化的文档,通常会失败。

enumerator = criteria.find(-> { "Default Band" })

参数:

  • *args ( [ Object | Array<Object> ]... )

    ID。

  • 区块(&B)

    要传递的可选区块。

产量:

  • ( Object )

    将每个可枚举元素生成到区块中。

返回:

引发:

  • Errors::DocumentNotFound 如果参数为 _id 值,且未找到所有文档,且raise_not_found_error Mongoid 配置选项为 true。

另请参阅:



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注入攻击。

例子:

通过JavaScript查找。

Band.for_js("this.name = param", param: "Tool")

参数:

  • Javascript ( string )

    要在 $where 中执行的 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

#freezeCriteria

冻结条件时,我们需要先初始化上下文,否则在尝试迭代时设置上下文将引发运行时错误。

例子:

冻结条件。

criteria.freeze

返回:



223
224
225
# File 'lib/mongoid/criteria.rb', 第223行

def 冻结
  上下文  包含  
end

# merge (other) ⇒ Criteria

将另一个对象与此Criteria合并并返回一个新条件。 另一个对象可能是CriteriaHash 。 这用于将多个作用域组合在一起,其中可能需要链式作用域情况。

例子:

将条件与另一个条件合并。

criteria.merge(other_criteria)

将条件与哈希合并。 哈希必须包含一个类

key and the key/value pairs correspond to method names/args.

criteria.merge({
  klass: Band,
  where: { name: "Depeche Mode" },
  order_by: { name: 1 }
})

参数:

  • 其他 ( Criteria )

    要合并的另一个条件。

返回:



260
261
262
263
264
# File 'lib/mongoid/criteria.rb', 第260行

def 合并(merge)(其他)
  Crit = 克隆
  Crit.合并!(其他)
  Crit
end

# merge! (其他)→标准

将其他条件合并到此条件中。

例子:

将另一个条件合并到此条件中。

criteria.merge(Person.where(name: "bob"))

参数:

  • 其他 ( Criteria | Hash )

    要合并的条件。

返回:



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.scoped_options = 其他.scoped_options
  self.包含 = (包含 + 其他.包含).uniq
  self
end

# none条件

返回始终包含零个结果且从不访问数据库的条件。

例子:

返回无条件。

criteria.none

返回:



291
292
293
# File 'lib/mongoid/criteria.rb', 第291行

def 
  @none = true  self
end

# only (*args) ⇒条件

覆盖以在字段中包含 _type。

例子:

限制从数据库返回的字段。

Band.only(:name)

参数:

  • *args ( [Symbol | Array<Symbol>]... )

    字段名称。

返回:



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)。

例子:

设置读取偏好(read preference)。

criteria.read(mode: :primary_preferred)

参数:

  • 哈希 (默认为: nil

    模式偏好。

返回:



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。

例子:

标准是否响应方法?

crtiteria.respond_to?(:each)

参数:

  • 名称 (符号)

    Document上的类方法的名称。

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

    是否包含私有成员。

返回:

  • ( true | false )

    如果条件响应该方法。



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_criteriaCriteria

已弃用。

为想要合并到条件中的对象提供了便利。

例子:

转换为条件。

criteria.to_criteria

返回:



374
375
376
# File 'lib/mongoid/criteria.rb', 第374行

def to_criteria
  self
end

# to_procProc

将条件转换为过程。

例子:

将条件转换为过程。

criteria.to_proc

返回:

  • ( Proc )

    封装的条件。



385
386
387
# File 'lib/mongoid/criteria.rb', 第385行

def to_proc
  ->{ self }
end

# type (types) ⇒条件

Criteria添加一个条件,用于指定必须匹配的类型或类型数组。

例子:

仅匹配特定模型。

criteria.type('Browser')
criteria.type(['Firefox', 'Browser'])

参数:

  • 类型 ( Array<String> )

    要匹配的类型。

返回:



399
400
401
# File 'lib/mongoid/criteria.rb', 第399行

def 类型(类型)
  any_in(self.discriminator_key.to_sym => 阵列(类型))
end

# where (*args) ⇒条件

这是大多数 MongoDB 查询的一般入口点。 这会创建一个标准字段:值选择和使用哈希方法扩展的选择,或者如果提供了string ,则创建 $where 选择。

例子:

添加标准选择。

criteria.where(name: "syd")

添加 JavaScript 选择。

criteria.where("this.name == 'syd'")

参数:

  • *args ( [ Hash | string ]... )

    标准选择或JavaScript string 。

返回:

  • ( Criteria )

    克隆的可选内容。

引发:

  • ( UnsupportedJavascript )

    如果提供了一个string ,则嵌入了该条件。



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 。

例子:

排除从数据库返回的字段。

Band.without(:name)

参数:

  • *args (符号... )

    字段名称。

返回:



347
348
349
350
# File 'lib/mongoid/criteria.rb', 第347行

def 没有(*args)
  args -= id_fields
  (*args)
end

# without_options ⇒ 条件

获取此条件的不带选项的版本。

例子:

获取不带选项的条件。

criteria.without_options

返回:



446
447
448
449
450
# File 'lib/mongoid/criteria.rb', 第446行

def without_options
  Crit = 克隆
  Crit.选项.清除
  Crit
end