类:Mongo::Client
Overview
客户端是驱动程序的入口点,也是与之交互的主要对象。
常量摘要折叠
- CRUD_OPTIONS =
不影响集群及其子组件行为的选项。
[ :auto_encryption_options, :database, :read, :read_concern, :write, :write_concern, :retry_reads, :max_read_retries, :read_retry_interval, :retry_writes, :max_write_retries, :max_adaptive_retries, :enable_overload_retargeting, :timeout_ms, # 当前不能出现在此处的选项: # # :server_selection_timeout # 集群构造函数使用MongoDB Server选择超时来确定 # 在兼容模式下等待初始扫描的时间,但一次 # 集群已初始化,不再使用此超时。 # 不幸的是,服务器选择器读取服务器选择超时 # 集群,此行为是 Cluster#next_primary 所要求的 # 不带参数。当 next_primary 被删除时,我们可以重新访问 # 使用具有不同服务器选择超时的相同集群对象。 ].冻结
- VALID_OPTIONS =
有效的客户端选项。
%i[ app_name auth_mech auth_mech_properties auth_source auto_encryption_options bg_error_backtrace cleanup compressors direct_connection enable_overload_retargeting 连接 connect_timeout database heartbeat_Frequency id_generator load_balanced local_threshold 记录器 log_prefix max_adaptive_retries max_connecting max_idle_time max_pool_size max_read_retries max_write_retries min_pool_size 监控 monitoring_io 密码 平台 Populator_io 读 read_concern read_retry_interval replica_set resolv_options retry_reads retry_writes 扫描 sdam_proc server_api server_monitoring_mode server_selection_timeout socket_timeout srv_max_hosts srv_service_name ssl ssl_ca_cert ssl_ca_cert_object ssl_ca_cert_string ssl_cert ssl_cert_object ssl_cert_string ssl_key ssl_key_object ssl_key_pass_phrase ssl_key_string ssl_verify ssl_verify_certificate ssl_verify_hostname ssl_verify_ocsp_endpoint timeout_ms 跟踪 truncate_logs user wait_queue_timeout wrapping_libraries 写 write_concern zlib_compression_level ].冻结
- VALID_COMPRESSORS =
驱动程序支持的压缩算法。
[ mongo::protocol::压缩::zstd, mongo::protocol::压缩::snappy, mongo::protocol::压缩::zlib ].冻结
- VALID_SERVER_API_VERSIONS =
已知的服务器 API 版本。
%w[ 1 ].冻结
Loggable中包含的常量
实例属性摘要折叠
-
# cluster ⇒ Mongo::Cluster
只读
集群 客户端的服务器集群。
-
#数据库⇒ Mongo::Database
只读
数据库客户端端正在操作的数据库。
-
# encrypter ⇒ Mongo::Crypt::AutoEncrypter
只读
封装自动加密行为的对象。
-
# options ⇒ 哈希
只读
选项 配置选项。
-
#retry_policy ⇒ Mongo::Retryable::RetryPolicy
只读
private
反压和自适应重试的重试策略。
类方法摘要折叠
-
。 canonicalize_ruby_options (options) ⇒ 对象
private
将指定选项中的身份验证机制属性(如果给定)小写,然后将选项转换为 Options::Redacted 的实例。
实例方法摘要折叠
-
# == (other) ⇒ true, false (又名:#eql?)
确定此客户端是否等同于另一个对象。
-
# [] (collection_name, options = {}) ⇒ Mongo::Collection
获取所提供集合名称的集合对象。
-
# close ⇒ true
关闭所有连接。
-
# close_encrypter ⇒ true
关闭加密器并清理自动加密资源。
- #已关闭? ⇒ 布尔
- # cluster_options ⇒ 对象 private
-
# database_names (filter = {}, opts = {}) ⇒ Array<String>
获取所有数据库的名称。
-
#encrypted_fields_map ⇒ 哈希 | nil
private
如果在创建客户端时提供了加密字段映射哈希,则返回加密字段映射哈希。
-
# get_session (options = {}) ⇒ 会话 | nil
private
如果可能,返回用于操作的会话。
-
#哈希⇒ 整数
获取客户端的哈希值。
-
#initialize (addresses_or_uri, options = nil) ⇒ 客户端
构造函数
实例化一个新的驱动程序客户端。
-
#检查⇒ string
以string形式获取客户端检查结果。
-
# list_databases (过滤 = {}, name_only = false, opts = {}) ⇒ Array<Hash>
获取每个数据库的信息。
-
# list_mongo_databases (过滤 = {}, opts = {}) ⇒ Array<Mongo::Database>
返回 Mongo::Database 对象的列表。
-
# max_read_retries ⇒ 整数
private
获取使用传统读取重试时客户端可以重试读取操作的最大次数。
-
# max_write_retries ⇒ 整数
private
获取使用传统写入重试时客户端可以重试写入操作的最大次数。
-
# read_concern ⇒ 哈希
获取此客户端的读关注(read concern)。
-
# read_preference ⇒ BSON::Document
从传递给客户端的选项中获取读取偏好(read preference)。
-
# read_retry_interval ⇒ 浮点
private
获取使用传统读取重试时读取重试的时间间隔(以秒为单位)。
-
# reconnect ⇒ true
重新连接客户端。
-
# server_selector ⇒ Mongo::ServerSelector
获取服务器选择器。
-
# start_session (options = {}) ⇒ 会话
启动会话。
-
#摘要⇒ string
获取客户端状态摘要。
-
#timeout_ms ⇒ Integer | nil
private
timeout_ms 选项的值(如果设立)。
-
#timeout_sec ⇒ Float | nil
private
timeout_ms 选项的值转换为秒。
-
#跟踪器 ⇒ Tracing::Tracer | nil
获取为此客户端配置的跟踪器。
-
# update_options (new_options) ⇒ 哈希
private
从 new_options 更新此客户端的选项,从而验证所有选项。
-
# use (name) ⇒ Mongo::Client
创建一个新客户端,配置为使用具有提供名称的数据库,并使用此客户端中配置的其他选项。
-
# watch (pipeline = [], options = {}) ⇒ ChangeStream
允许用户请求为客户端集群中发生的所有更改发送通知。
-
# with (new_options = nil) ⇒ Mongo::Client
创建一个新客户端,并将传递的选项合并到该客户端的现有选项上。
-
# with_session (options = {}) ⇒ 对象
private
如果可能,创建一个用于操作的会话,并将其生成提供的区块。
-
# write_concern ⇒ Mongo::WriteConcern
获取此客户端的写关注。
Loggable中包含的方法
#log_debug 、 #log_error 、 #log_ Fatal 、 #log_info 、 #log_warn 、 #logger
构造函数详情
#initialize (addresses_or_uri, options = nil) ⇒客户端
实例化一个新的驱动程序客户端。
526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 |
# File 'lib/ Mongo/ 客户端.rb', 第 526 行 def 初始化(Addresses_or_uri, = nil) = ? .dup : {} 已处理 = process_addresses(Addresses_or_uri, ) uri = 已处理[:uri] 地址 = 已处理[:addresses] = 已处理[:options] # 如果 URI 是 SRV URI,请记下这一点,以便我们可以启动 # 如果拓扑结构是分片集群,则 SRV 轮询。 srv_uri = uri if uri.is_a?(URI::SRVProtocol) = self.class.() # 服务器API版本指定为string 。 # 但是,总是以string形式提供数字 1 是非常烦人的, # 因此在此处转换为string类型。 if (server_api = [:server_api]) && server_api.is_a?(哈希) server_api = 选项::已编辑.new(server_api) if (版本 = server_api[:version]).is_a?(整型) [:server_api] = server_api.合并(merge)(版本: 版本.to_s) end end # 对 sdam_proc 进行特殊处理,因为它仅在客户端期间使用 # 构建 sdam_proc = .删除(:sdam_proc) # 对于 gssapi service_name,默认选项以哈希形式给出 #(从顶层向下一级)。 = () .每 do |k, v| default_v = [k] v = default_v.合并(merge)(v) if default_v.is_a?(哈希) [k] = v end = .密钥.每 do |k| .删除(k) if [k].nil? end @options = () # WriteConcern对象支持 # if @options[:write_concern].is_a?(WriteConcern::Base) # # 缓存实例,以便我们不会不必要地重建它。 # @write_concern = @options[:write_concern] # @options[:write_concern] = @write_concern.options # end @options.冻结 (地址, is_srv: uri.is_a?(URI::SRVProtocol)) = @options.dup .删除(:server_api) @database = Database.new(self, @options[:database], ) # 临时设立监控,以便事件订阅 # 在没有集群的情况下进行设置 @monitoring = 监控.new(@options) sdam_proc.调用(self) if sdam_proc @connect_lock = 互斥锁.new @retry_policy = 可重试::RetryPolicy.new( max_retries: @options[:max_adaptive_retries] || 可重试::背压::DEFAULT_MAX_RETRIES ) @connect_lock.同步 do @cluster = 集群.new( 地址, @monitoring, .合并(merge)(srv_uri: srv_uri) ) end 开始 # 取消设置监控,从现在开始将其从集群中删除 remove_instance_variable(:@monitoring) if @options[:auto_encryption_options] @connect_lock.同步 do build_encrypter end end 救援 StandardError 开始 @cluster.关闭 救援 StandardError => e log_warn(" 在客户端构造函数的异常处理程序中关闭集群时出错: #{e.类}: #{e}") # 删除此异常,以便引发原始异常 end 提高 end return 除非 block_given? 开始 产量(self) 确保 关闭 end end |
实例属性详细信息
# 集群 ⇒ Mongo::Cluster (readonly)
返回集群客户端的服务器集群。
143 144 145 |
# File 'lib/ Mongo/ 客户端.rb', 第 143 行 def 集群 @cluster end |
#数据库⇒ Mongo::Database (readonly)
返回数据库 客户端正在操作的数据库。
146 147 148 |
# File 'lib/ Mongo/ 客户端.rb', 第 146 行 def database @database end |
# encrypter ⇒ Mongo::Crypt::AutoEncrypter (readonly)
返回 封装自动加密行为的对象。
153 154 155 |
# File 'lib/ Mongo/ 客户端.rb', 第 153 行 def 加密器 @encrypter end |
# options ⇒哈希(只读)
返回 options 配置选项。
149 150 151 |
# File 'lib/ Mongo/ 客户端.rb', 第 149 行 def @options end |
# retry_policy ⇒ Mongo::Retryable::RetryPolicy (只读)
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回 反压和自适应重试的重试策略。
158 159 160 |
# File 'lib/ Mongo/ 客户端.rb', 第 158 行 def retry_policy @retry_policy end |
类方法详细信息
。 canonicalize_ruby_options (options) ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
将指定选项中的身份验证机制属性(如果给定)小写,然后将选项转换为 Options::Redacted 的实例。
1177 1178 1179 1180 1181 1182 1183 1184 |
# File 'lib/ Mongo/ 客户端.rb', 第 1177 行 def () 选项::已编辑.new(哈希[.map do |k, v| if [ :auth_mech_properties, ' auth_mech_properties ' ].包括?(k) && v v = 哈希[v.map { |pk, pv| [ pk.Downcase, pv ] }] end [ k, v ] end]) end |
实例方法详细信息
# == (other) ⇒ true , false也称为: eql?
确定此客户端是否等同于另一个对象。
187 188 189 190 191 |
# File 'lib/ Mongo/ 客户端.rb', 第 187 行 def ==(其他) return false 除非 其他.is_a?(客户) 集群 == 其他.集群 && == 其他. end |
# [] (collection_name, options = {}) ⇒ Mongo::Collection
获取所提供集合名称的集合对象。
205 206 207 |
# File 'lib/ Mongo/ 客户端.rb', 第 205 行 def [ ](collection_name, = {}) database[collection_name, ] end |
# close ⇒ true
关闭所有连接。
878 879 880 881 882 883 884 |
# File 'lib/ Mongo/ 客户端.rb', 第 878 行 def 关闭 @connect_lock.同步 do @close = true do_close end true end |
# close_encrypter ⇒ true
关闭加密器并清理自动加密资源。
889 890 891 892 893 |
# File 'lib/ Mongo/ 客户端.rb', 第 889 行 def close_encrypter @encrypter.关闭 if @encrypter true end |
#已关闭? ⇒布尔
869 870 871 |
# File 'lib/ Mongo/ 客户端.rb', 第 869 行 def 已关闭? !!@close end |
# cluster_options ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 |
# File 'lib/ Mongo/ 客户端.rb', 第 631 行 def # 当具有不同 CRUD_OPTIONS 的新客户端出现时,我们会股票集群 # 已请求;因此,集群不应获得任何这些 # 实例化时的选项 .拒绝 do |key, _value| CRUD_OPTIONS.包括?(key.to_sym) end.合并(merge)( # 但需要放回数据库进行身份验证... database: [:database], # 放入这些选项是为了兼容传统版本,但请注意 # 它们在客户端和集群上的值不必匹配 - # 应用程序应从客户端而不是集群读取这些值 max_read_retries: [:max_read_retries], read_retry_interval: [:read_retry_interval], 追踪器: 追踪器 ).点击 do || # 如果客户端已有集群,则将 srv_uri 转发到新集群 # 用于维护 SRV 监控的集群。 如果客户端是全新的, # 其构造函数手动设置 srv_uri。 .update(srv_uri: 集群.[:srv_uri]) if 集群 end end |
# database_names (filter = {}, opts = {}) ⇒ Array<String>
获取所有数据库的名称。
947 948 949 |
# File 'lib/ Mongo/ 客户端.rb', 第 947 行 def database_names(筛选器 = {}, opts = {}) list_databases(筛选器, true, opts).收集 { |信息| 信息[' name '] } end |
#encrypted_fields_map ⇒哈希 | nil
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
如果在创建客户端时提供了加密字段映射哈希,则返回加密字段映射哈希。
1191 1192 1193 |
# File 'lib/ Mongo/ 客户端.rb', 第 1191 行 def encryption_fields_map @encrypted_fields_map ||= @options.获取(:auto_encryption_options, {})[:encrypted_fields_map] end |
# get_session (options = {}) ⇒会话| nil
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
如果可能,返回用于操作的会话。
如果设置了 :session 选项,则验证该会话并将其返回。 否则,如果部署支持会话,则创建一个新会话并将其返回。 创建新会话时,如果给出 :implicit 选项,则该会话将为隐式会话(生命周期由驱动程序管理),否则会话将为显式会话(生命周期由应用程序管理)。 如果部署不支持会话,则返回 nil。
1135 1136 1137 1138 1139 |
# File 'lib/ Mongo/ 客户端.rb', 第 1135 行 def get_session( = {}) get_session!() 救援 错误::SessionsNotSupported nil end |
#哈希⇒整数
获取客户端的哈希值。
217 218 219 |
# File 'lib/ Mongo/ 客户端.rb', 第 217 行 def 哈希 [ 集群, ].哈希 end |
#检查⇒ string
以string形式获取客户端检查结果。
693 694 695 |
# File 'lib/ Mongo/ 客户端.rb', 第 693 行 def 检查 " #<Mongo::Client:0 x #{ object_id} 集群= #{ 集群.summary} > " end |
# list_databases (filter = {}, name_only = false, opts = {}) ⇒ Array<Hash>
获取每个数据库的信息。
See https://mongodb.com/zh-cn/docs/manual/reference/command/listDatabases/
for more information and usage.
978 979 980 981 982 983 984 985 986 987 |
# File 'lib/ Mongo/ 客户端.rb', 第 978 行 def list_databases(筛选器 = {}, name_only = false, opts = {}) cmd = { listDatabases: 1 } cmd[:nameOnly] = !!name_only cmd[:filter] = 筛选器 除非 筛选器.空? cmd[:authorizedDatabases] = true if opts[:authorized_databases] 请使用(Database::ADMIN) .database .read_command(cmd, opts.合并(merge)(op_name: 'listDatabases')) .first[Database::数据库] end |
# list_mongo_databases (filter = {}, opts = {}) ⇒ Array< Mongo::Database >
返回 Mongo::Database 对象的列表。
1004 1005 1006 1007 1008 |
# File 'lib/ Mongo/ 客户端.rb', 第 1004 行 def list_mongo_databases(筛选器 = {}, opts = {}) database_names(筛选器, opts).收集 do |名称| Database.new(self, 名称, ) end end |
# max_read_retries ⇒整数
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
获取使用传统读取重试时客户端可以重试读取操作的最大次数。
661 662 663 |
# File 'lib/ Mongo/ 客户端.rb', 第 661 行 def max_read_retries [:max_read_retries] || 集群::MAX_READ_RETRIES end |
# max_write_retries ⇒整数
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
获取使用传统写入重试时客户端可以重试写入操作的最大次数。
681 682 683 |
# File 'lib/ Mongo/ 客户端.rb', 第 681 行 def max_write_retries [:max_write_retries] || 集群::MAX_WRITE_RETRIES end |
# read_concern ⇒哈希
获取此客户端的读关注(read concern)。
852 853 854 |
# File 'lib/ Mongo/ 客户端.rb', 第 852 行 def read_concern [:read_concern] end |
# read_preference ⇒ BSON::Document
从传递给客户端的选项中获取读取偏好(read preference)。
741 742 743 |
# File 'lib/ Mongo/ 客户端.rb', 第 741 行 def read_preference @read_preference ||= [:read] end |
# read_retry_interval ⇒浮点
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
获取使用传统读取重试时读取重试的时间间隔(以秒为单位)。
671 672 673 |
# File 'lib/ Mongo/ 客户端.rb', 第 671 行 def read_retry_interval [:read_retry_interval] || 集群::READ_RETRY_INTERVAL end |
# reconnect ⇒ true
重新连接客户端。
903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 |
# File 'lib/ Mongo/ 客户端.rb', 第 903 行 def 重新连接 地址 = 集群.地址.map(和:to_s) @connect_lock.同步 do 开始 do_close 救援 StandardError nil end @cluster = 集群.new(地址, 监控, ) build_encrypter if @options[:auto_encryption_options] @close = false end true end |
# server_selector ⇒ Mongo::ServerSelector
获取服务器选择器。 它要么使用客户端选项中定义的读取偏好,要么默认为主服务器选择器。
719 720 721 722 723 724 725 |
# File 'lib/ Mongo/ 客户端.rb', 第 719 行 def server_selector @server_selector ||= if read_preference ServerSelector.获取(read_preference) else ServerSelector.主节点 end end |
# start_session (options = {}) ⇒会话
会话不能同时被多个线程使用;会话对象不是线程安全的。
启动会话。
如果部署不支持会话,则引发 Mongo::Error::InvalidSession。当驱动程序未连接到承载数据的服务器时(例如在故障转移期间),也可能会引发此异常。
1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 |
# File 'lib/ Mongo/ 客户端.rb', 第 1029 行 def start_session( = {}) 会话 = get_session!(.合并(merge)(隐式: false)) if block_given? 开始 产量 会话 确保 会话.end_session end else 会话 end end |
#摘要⇒ string
返回的摘要 string 的确切格式和布局不是驱动程序公共API的一部分,并且可能随时更改。
获取客户端状态摘要。
705 706 707 |
# File 'lib/ Mongo/ 客户端.rb', 第 705 行 def 总结 " #<Client cluster= #{ cluster .summary } } > " end |
#timeout_ms ⇒ Integer | nil
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回 timeout_ms 选项的值(如果设立)。
1197 1198 1199 |
# File 'lib/ Mongo/ 客户端.rb', 第 1197 行 def timeout_ms @options[:timeout_ms] end |
#timeout_sec ⇒ Float | nil
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回转换为秒的 timeout_ms 选项值。
1203 1204 1205 1206 1207 1208 1209 |
# File 'lib/ Mongo/ 客户端.rb', 第 1203 行 def timeout_sec if timeout_ms.nil? nil else timeout_ms / 1_000.0 end end |
# 跟踪器 ">Tracing::Tracer | nil
获取为此客户端配置的跟踪器。
1214 1215 1216 1217 1218 1219 1220 1221 |
# File 'lib/ Mongo/ 客户端.rb', 第 1214 行 def 追踪器 tracing_opts = @options[:tracing] || {} @tracer ||= 追踪.create_tracer( 已启用: tracing_opts[:enabled], query_text_max_length: tracing_opts[:query_text_max_length], otel_tracer: tracing_opts[:tracer] ) end |
#update_options(new_options) ⇒ Hash
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
从 new_options 更新此客户端的选项,从而验证所有选项。
新选项可以根据各种规则进行转换。 返回实际应用于客户端的选项的最终哈希值。
如果选项验证失败,此方法可能会发出警告或引发异常。 如果此方法引发异常,则应丢弃客户端(与构造函数引发异常的情况类似)。
806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 |
# File 'lib/ Mongo/ 客户端.rb', 第 806 行 def () = @options = self.class.( || {}) ().点击 do |opts| # 我们的选项已冻结 = @options.dup .删除(:write) if [:write] && opts[:write_concern] .删除(:write_concern) if [:write_concern] && opts[:write] .update(opts) @options = .冻结 = @options[:auto_encryption_options] != [:auto_encryption_options] # 如果有新的 auto_encryption_options,则创建新的加密器。 # 否则,允许新客户端与 # 原始客户端。 # # 如果 auto_encryption_options 为 nil,则将 @encrypter 设置为 nil,但不 # 关闭加密器,因为原始客户端可能仍在使用它。 if @options[:auto_encryption_options] && @connect_lock.同步 do build_encrypter end elsif @options[:auto_encryption_options].nil? @connect_lock.同步 do @encrypter = nil end end end end |
# use (name) ⇒ Mongo::Client
新客户端与原始客户端共享集群,因此也共享监控实例和监控事件订阅者。
创建一个新客户端,配置为使用具有提供名称的数据库,并使用此客户端中配置的其他选项。
760 761 762 |
# File 'lib/ Mongo/ 客户端.rb', 第 760 行 def 请使用(名称) 通过(database: 名称) end |
# watch (管道 = [], options = {}) ⇒ ChangeStream
变更流只允许“大多数”读关注(read concern)。
出于支持可恢复性的目的,此辅助方法优于使用 $changeStream 阶段运行原始聚合。
允许用户请求为客户端集群中发生的所有更改发送通知。
1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 |
# File 'lib/ Mongo/ 客户端.rb', 第 1104 行 def 观看(管道 = [], = {}) return 请使用(Database::ADMIN).观看(管道, ) 除非 database.名称 == Database::ADMIN = .dup [:cursor_type] = :tailable_await if [:max_await_time_ms] mongo::Collection::查看::变更流.new( mongo::Collection::查看.new(self[" #{ Database :: COMMAND } .aggregate "], {}, ), 管道, mongo::Collection::查看::变更流::集群, ) end |
# with (new_options = nil) ⇒ Mongo::Client
根据给定的选项,返回的客户端可能与原始客户端共享集群,或者使用新集群创建。 如果创建了新集群,则新客户端上的监控事件订阅者将设置为默认事件订阅者集,并且原始客户端上的任何订阅者都不会被复制。
创建一个新客户端,并将传递的选项合并到该客户端的现有选项上。 对于在不改变原始客户端的情况下一次性更改特定选项非常有用。
782 783 784 785 786 787 788 789 790 |
# File 'lib/ Mongo/ 客户端.rb', 第 782 行 def 通过( = nil) 克隆.点击 do |客户端| opts = 客户端.( || 选项::已编辑.new) Database.创建(客户端) # 如果某些选项会影响集群,则不能使用该集群 # 已更改。 集群.创建(客户端, 监控: opts[:monitoring]) if (opts) end end |
# with_session (options = {}) ⇒ 对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
如果可能,创建一个用于操作的会话,并将其生成提供的区块。
如果设置了 :session 选项,则验证该会话并使用它。 否则,如果部署支持会话,则创建并使用新会话。 创建新会话时,如果给出 :implicit 选项,则该会话将为隐式会话(生命周期由驱动程序管理),否则会话将为显式会话(生命周期由应用程序管理)。 如果部署不支持会话,则块的产出为 nil。
当区块完成时,如果会话已创建并且是隐式的,或者传入了隐式会话,则会话将结束,从而将其返回到可用会话池中。
1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 |
# File 'lib/ Mongo/ 客户端.rb', 第 1161 行 def with_session( = {}) # TODO:将其重新添加到 RUBY- 3174中。 #assert_not_close 会话 = get_session() 产量 会话 确保 会话.end_session if 会话 && 会话.隐式? end |
# write_concern ⇒ Mongo::WriteConcern
获取此客户端的写关注。 如果未提供选项,则使用默认的单服务器确认。
865 866 867 |
# File 'lib/ Mongo/ 客户端.rb', 第 865 行 def write_concern @write_concern ||= writeConcern.获取([:write_concern] || [:write]) end |