模块:Mongo::Collection::View::Iterable

包含在:
Mongo::Collection::ViewAggregation
定义于:
build/Ruby-driver-v 2.19 /lib/mongo/collection/view/iterable.rb

Overview

为集合视图定义与迭代相关的行为,包括游标实例化。

由于:

  • 2.0.0

实例属性摘要折叠

实例方法摘要折叠

实例属性详细信息

#cursornil | Cursor (readonly)

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

返回与此视图关联的游标(如果有)。

返回:

  • (nil | Cursor)

    游标(如果有)。

由于:

  • 2.0.0



33
34
35
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection/view/iterable.rb', 第33行

def cursor
  @cursor
end

实例方法详细信息

# close_querynil也称为: kill_cursors

注意:

此方法会传播关闭服务器端游标时发生的任何错误。

清理与此查询关联的资源。

如果存在与此查询关联的服务器游标,则通过向服务器发送 KillCursors 命令将其关闭。

返回:

  • ( nil )

    始终为零。

引发:

由于:

  • 2.1.0



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遍历查询返回的文档。

例子:

遍历视图的结果。

view.each do |document|
  p document
end

收益参数:

  • 每个 (哈希)

    匹配文档。

返回:

  • (枚举器)

    枚举器。

由于:

  • 2.0.0



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, **cache_options)
      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