模块:Mongo::Collection::View::Iterable
- 定义于:
- build/Ruby-driver-v 2.19 /lib/mongo/collection/view/iterable.rb
Overview
为集合视图定义与迭代相关的行为,包括游标实例化。
实例属性摘要折叠
-
#cursor ⇒ nil | Cursor
只读
private
返回与此视图关联的游标(如果有)。
实例方法摘要折叠
-
# close_query ⇒ nil (也:#kill_cursors)
清理与此查询关联的资源。
-
#每个{|Each| ... } ⇒ 枚举器
使用
View
遍历查询返回的文档。
实例属性详细信息
#cursor ⇒ nil | Cursor (readonly)
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回与此视图关联的游标(如果有)。
33 34 35 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection/view/iterable.rb', 第33行 def cursor @cursor end |
实例方法详细信息
# close_query ⇒ nil也称为: kill_cursors
注意:
此方法会传播关闭服务器端游标时发生的任何错误。
清理与此查询关联的资源。
如果存在与此查询关联的服务器游标,则通过向服务器发送 KillCursors 命令将其关闭。
106 107 108 109 110 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection/view/iterable.rb', 第106行 def close_query if @cursor @cursor.关闭 end end |
#每个{|Each| ... } ⇒枚举器
使用View
遍历查询返回的文档。
47 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 90 91 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection/view/iterable.rb', 第47行 def 每 # 如果缓存游标已关闭且未完全迭代, # 其中的文档不是完整的结果设立,并且 # 我们无法完成该迭代。 # 因此,丢弃该游标并再次开始迭代。 # 缓存游标未关闭且没有 # 已完全迭代未经测试 - 请参阅 RUBY- 2773 。 @cursor = if use_query_cache? && cached_cursor && ( cached_cursor.full_iterated? || !cached_cursor.已关闭? ) cached_cursor else 会话 = 客户端.发送(:get_session, @options) select_cursor(会话).点击 do |cursor| if use_query_cache? # 如果存在,则无需将游标存储在查询缓存中 # 已经有一个缓存游标存储在该键上。 查询缓存.集(cursor, **) end end end if use_query_cache? # 如果执行有限制的查询,则查询缓存将 # 重复使用先前查询的结果,该查询具有相同或更大的 # limit,然后在迭代期间施加下限。 limit_for_cached_query = respond_to?(:limit) ? 查询缓存.normalized_limit(limit) : nil end if block_given? # Ruby 版本2.5及更早版本不支持 arr[ 0 ..nil] 语法,因此 # 这必须是一个单独的条件。 cursor_to_iterate = if limit_for_cached_query @cursor.to_a[0...limit_for_cached_query] else @cursor end cursor_to_iterate.每 do |doc| 产量 doc end else @cursor.to_enum end end |