类:Mongo::Operation::Result

继承:
对象
  • 对象
显示全部
扩展方式:
可转发
包括:
可枚举
定义于:
build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb ,
build/Ruby-driver-v 2.19 /lib/mongo/operation/shared/result/aggregatable.rb,
build/Ruby-driver-v 2.19 /lib/mongo/operation/shared/result/use_legacy_error_parser.rb

Overview

传输协议回复的结果包装器。

一个操作有零个或一个回复。 唯一产生零回复的操作是未确认的写入;所有其他操作都会产生一个回复。 此类提供了一个对象,即使操作未生成回复(在这种情况下假定已成功),也可以对其进行操作(例如,检查操作是否成功)。

由于:

  • 2.0.0

在命名空间下定义

模块: Aggregatable , UseLegacyErrorParser

常量摘要折叠

CURSOR =

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

聚合中游标文档的字段名称。

由于:

  • 2.2.0

' cursor '.冻结
CURSOR_ID =

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

游标文档中的游标 ID 字段。

由于:

  • 2.2.0

' ID '.冻结
FIRST_BATCH =

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

游标第一批的字段名称。

由于:

  • 2.2.0

' firstBatch '.冻结
NEXT_BATCH =

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

下一批游标的字段名称。

由于:

  • 2.2.0

' nextBatch '.冻结
NAMESPACE =

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

游标文档中的命名空间字段。

由于:

  • 2.2.0

' ns '.冻结
N =

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

写入中更新的文档数量。

由于:

  • 2.0.0

'n'.冻结
确定 =

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

结果中的 ok 状态字段。

由于:

  • 2.0.0

' Ok '.冻结
结果 =

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

结果字段常量。

由于:

  • 2.2.0

' result '.冻结

实例属性摘要折叠

实例方法摘要折叠

构造函数详情

#initialize (replies, connection_description = nil, connection_global_id = nil) ⇒结果

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

初始化新结果。

对于未确认的写入,请在回复中传递 nil。

For all other operations, replies must be a Protocol::Message instance or an array containing a single Protocol::Message instance.

参数:

  • 回复 (Protocol::Message | Array<Protocol::Message> | nil)

    传输协议进行回复。

  • connection_description ( Server::Description | nil ) (默认为: nil

    MongoDB Server对执行此结果所属操作的服务器的描述。 为了与现有的 mongo_kerberos 库兼容,该参数允许为 nil,但在驱动程序本身中不应始终为 nil。

  • connection_global_id 整数 (默认为: nil

    执行此结果所属操作的连接的全局 ID。

由于:

  • 2.0.0



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第105行

def 初始化(回复, connection_description = nil, connection_global_id = nil)
  if 回复
    if 回复.is_a?(阵列)
      if 回复.长度 != 1
        提高 ArgumentError, " 仅支持一个(或零个)回复,因为 # { replies.length } } "
      end
      回复 = 回复.first
    else
      回复 = 回复
    end
    除非 回复.is_a?(protocol::message)
      提高 ArgumentError, " Argument 必须是 Message 实例,但是是#{ reply . class } : #{ reply .inspect } } "
    end
    @replies = [ 回复 ]
    @connection_description = connection_description
    @connection_global_id = connection_global_id
  end
end

实例属性详细信息

# connection_descriptionServer::Description (readonly)

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

返回对该结果执行操作的服务器的MongoDB Server描述。

返回:

由于:

  • 2.0.0



133
134
135
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第133行

def connection_description
  @connection_description
end

# connection_global_id对象(只读)

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

返回针对此结果所属的操作执行的连接的全局。

返回:

  • ( Object )

    全局是针对此结果所针对的操作执行的连接的。

由于:

  • 2.0.0



139
140
141
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第139行

def connection_global_id
  @connection_global_id
end

#repliesArray<Protocol::Message> (readonly)

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

返回回复 包装的传输协议回复。

返回:

由于:

  • 2.0.0



127
128
129
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第127行

def 回复
  @replies
end

实例方法详细信息

#已确认?true , false

注意:

在 MongoDB 2.6及更高版本上,所有写入都会得到确认,因为驱动程序对所有写入操作都使用写入命令。 在2.4及更低版本中,如果在命令之后执行了 GLE,则会确认结果。 否则,将不会指定任何回复。 此处读取将始终返回 true,因为始终会提供回复。

是否已确认结果?

返回:

  • ( true , false )

    如果结果得到确认。

由于:

  • 2.0.0



157
158
159
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第157行

def 已确认?
  !!@replies
end

# cluster_timeClusterTime | nil

获取服务器响应中报告的集群时间。

在版本2.9.0中进行了更改: 此属性成为 ClusterTime 的实例,而 ClusterTime 是 BSON::Document 的子类。 以前它是 BSON::Document 的实例。

例子:

获取集群时间。

result.cluster_time

返回:

由于:

  • 2.5.0



424
425
426
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第424行

def cluster_time
  first_document && ClusterTime[first_document[' $clusterTime ']]
end

# cursor_id = " Integer "

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

注意:

游标 ID 为0表示服务器上没有游标。

如果响应得到确认,则获取游标 ID。

例子:

获取游标 ID。

result.cursor_id

返回:

  • ( Integer )

    游标 ID。

由于:

  • 2.0.0



181
182
183
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第181行

def cursor_id
  已确认? ? 回复.last.cursor_id : 0
end

# 个documentsArray<BSON::Document>

获取结果中的文档。

例子:

获取文档。

result.documents

返回:

  • ( Array<BSON::Document> )

    文档。

由于:

  • 2.0.0



205
206
207
208
209
210
211
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第205行

def 文档
  if 已确认?
    回复.flat_map(:documents)
  else
    []
  end
end

#每个{|Each| ... } ⇒枚举器

遍历回复中的文档。

例子:

遍历文档。

result.each do |doc|
  p doc
end

收益参数:

  • 每个 ( BSON::Document )

    结果中的文档。

返回:

  • (枚举器)

    枚举器。

由于:

  • 2.0.0



226
227
228
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第226行

def ()
  文档.()
end

# errorError::OperationFailure

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

处理此结果期间将引发的异常实例(属于 Error::OperationFailure 类)。

仅当结果不成功时才应调用此方法。

返回:

由于:

  • 2.0.0



341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第341行

def 错误
  @error ||= 错误::OperationFailure.new(
    解析器.message,
    self,
    代码: 解析器.代码,
    code_name: 解析器.code_name,
    write_concern_error_document: 解析器.write_concern_error_document,
    write_concern_error_code: 解析器.write_concern_error_code,
    write_concern_error_code_name: 解析器.write_concern_error_code_name,
    write_concern_error_labels: 解析器.write_concern_error_labels,
    标签: 解析器.labels,
    wtimeout: 解析器.wtimeout,
    connection_description: connection_description,
    文档: 解析器.文档,
    server_message: 解析器.server_message,
  )
end

# has_cursor_id?true , false

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

结果是否包含 cursor_id

返回:

  • ( true , false )

    如果结果包含 cursor_id。

由于:

  • 2.0.0



166
167
168
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第166行

def has_cursor_id?
  已确认? && 回复.last.respond_to?(:cursor_id)
end

#检查string

获取结果的美观格式检查。

例子:

检查结果。

result.inspect

返回:

  • ( string )

    检查。

由于:

  • 2.0.0



239
240
241
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第239行

def 检查
  " #< #{ self . class . name } : 0 x #{ object_id } documents= #{ documents } > "
end

# labels数组

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

获取与结果关联的错误标签集。

例子:

获取标签。

result.labels

返回:

  • ( Array )

    labels 标签集。

由于:

  • 2.7.0



437
438
439
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第437行

def labels
  @labels ||= 解析器.labels
end

#命名空间Nil

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

获取游标的命名空间。 该方法应在结果类中定义,其中“ns”在服务器响应中。

返回:

  • ( Nil )

由于:

  • 2.0.0



192
193
194
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第192行

def namespace
  nil
end

#可以吗?true , false

检查第一个文档的 ok 字段。

例子:

检查 ok 字段。

result.ok?

返回:

  • ( true , false )

    如果命令返回正常。

由于:

  • 2.1.0



305
306
307
308
309
310
311
312
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第305行

def 确定吗?
  # first_document[OK] 是一个浮点数,服务器可以返回
  # 可以作为 BSON int 32 、 BSON int 64或 BSON double 。
  # 数字1可以精确地用浮点数表示,因此
  # 1.0 == 1将始终正确运行
  #(直到服务器返回1以外的其他内容为止)
  first_document[正常] == 1
end

# operation_time对象 | nil

获取服务器响应中报告的 optime。

例子:

获取optime 。

result.operation_time

返回:

  • ( Object | nil )

    optime值。

由于:

  • 2.5.0



407
408
409
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第407行

def operation_time
  first_document && first_document[OPERATION_TIME]
end

#replyProtocol::Message

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

从结果中获取回复。

如果没有回复(即该操作是未确认的写入),则返回 nil。

返回:

由于:

  • 2.0.0



252
253
254
255
256
257
258
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第252行

def 回复
  if 已确认?
    回复.first
  else
    nil
  end
end

# returned_count整数

获取此批处理中服务器返回的文档数。

返回:

  • ( Integer )

    返回的文档数量。

由于:

  • 2.0.0



266
267
268
269
270
271
272
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第266行

def returned_count
  if 已确认?
    回复.number_returned
  else
    0
  end
end

# snapshot_timestamp对象

由于:

  • 2.0.0



448
449
450
451
452
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第448行

def snapshot_timestamp
  if doc = 回复.文档.first
    doc[' cursor ']&。[ ]('atClusterTime') || doc['atClusterTime']
  end
end

#成功?true , false

注意:

如果写入未被确认,则始终返回 true。

如果结果是命令,则确定是否成功。

例子:

命令成功吗?

result.successful?

返回:

  • ( true , false )

    如果命令成功。

由于:

  • 2.0.0



287
288
289
290
291
292
293
294
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第287行

def 成功?
  return true if !已确认?
  if first_document.has_key?(正常)
    确定吗? && 解析器.message.空?
  else
    !query_failure? && 解析器.message.空?
  end
end

# topology_versionTopologyVersion | nil

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

返回 拓扑版本。

返回:

由于:

  • 2.0.0



370
371
372
373
374
375
376
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第370行

def topology_version
  除非 定义?(@topology_version)
    @topology_version = first_document['topologyVersion'] &&
      TopologyVersion.new(first_document['topologyVersion'])
  end
  @topology_version
end

# validate!结果

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

注意:

这只检查写入错误,因为身份验证是在连接级别处理的,并且在创建结果之前,任何身份验证错误都会在那里引发。

通过检查是否存在任何错误来验证结果。

例子:

验证结果。

result.validate!

返回:

  • (结果)

    验证通过后的结果。

引发:

由于:

  • 2.0.0



329
330
331
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第329行

def validate!
  !成功? ? Raise_operation_failure : self
end

# write_concern_error?布尔

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

操作是否因写关注错误而失败。

返回:

  • 布尔值

由于:

  • 2.0.0



444
445
446
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第444行

def write_concern_error?
  !!(first_document && first_document[' writeConcernError '])
end

# Write_countInteger也称为: n

获取服务器写入的文档数。

例子:

获取写入的文档数。

result.written_count

返回:

  • ( Integer )

    写入的文档数量。

由于:

  • 2.0.0



387
388
389
390
391
392
393
# File 'build/Ruby-driver-v 2.19 /lib/mongo/operation/result.rb', 第387行

def Write_Count
  if 已确认?
    first_document[N] || 0
  else
    0
  end
end