类:Mongo::Collection
- 继承:
-
对象
- 对象
- Mongo::Collection
- 扩展方式:
- 可转发
- 包括:
- 助手、 QueryableEncryption 、 Retryable
- 定义于:
- build/Ruby-driver-v 2.19 /lib/mongo/collection.rb ,
build/Ruby-driver-v 2.19 /lib/mongo/collection/view.rb,
build/Ruby-driver-v 2.19 /lib/mongo/collection/helpers.rb,
build/Ruby-driver-v 2.19 /lib/mongo/collection/view/iterable.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/collection/view/可读.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/collection/view/writable.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/collection/view/immutable.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/collection/view/map_reduce.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/collection/view/aggregation.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/collection/view/explainable.rb,
build/Ruby-driver-v 2 . 19 /lib/mongo/collection/view/change_stream.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/collection/queryable_encryption.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/collection/view/builder/map_reduce.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/collection/view/builder/aggregation.rb,
build/Ruby-driver-v 2 。 19 /lib/mongo/collection/view/change_stream/retryable.rb
Overview
表示数据库中的集合以及可直接应用于集合的操作。
在命名空间下定义
模块: 助手、 QueryableEncryption类:视图
常量摘要折叠
- CAPPED =
固定大小选项。
' capped '.冻结
- NS =
ns字段常量。
' ns '.冻结
- CHANGEABLE_OPTIONS =
可以通过 #with 方法在新的 Collection实例上更新的选项。
[ :read, :read_concern, :write, :write_concern ].冻结
- CREATE_COLLECTION_OPTIONS =
此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。
用于转换创建集合选项的选项映射。
{ :time_series => :timeseries, :expire_after => :expireAfterSeconds, :clustered_index => :clusteredIndex, :change_stream_pre_and_post_images => :changeStreamPreAndPostImages, :encrypted_fields => :encryptedFields, :validator => :validator, :view_on => :viewOn }
QueryableEncryption中包含的常量
QueryableEncryption::QE 2 _MIN_WIRE_VERSION
实例属性摘要折叠
-
#数据库⇒ Mongo::Database
只读
集合所在的数据库。
-
#名称⇒ string
只读
集合的名称。
-
# options ⇒ 哈希
只读
集合选项。
实例方法摘要折叠
-
# == (other) ⇒ true | false
检查集合是否等于另一个对象。
-
#aggregate (管道, options = {}) ⇒ View::Aggregation
对集合执行聚合。
-
# bulk_write (requests, options = {}) ⇒ BulkWrite::Result
执行批处理批量写入操作。
-
#固定大小? ⇒ true | false
集合是否有上限?
-
# count (filter = nil, options = {}) ⇒ Integer
已弃用
已弃用。
请改用#count_documents 或estimated_document_count。 但请注意,切换到 #count_documents 时需要替换以下操作符:
* $where should be replaced with $expr (only works on 3.6+) * $near should be replaced with $geoWithin with $center * $nearSphere should be replaced with $geoWithin with $centerSphere
-
# count_documents (filter = {}, options = {}) ⇒ Integer
获取与查询匹配的文档数。
-
# create (opts = {}) ⇒ 结果
强制在数据库中创建集合。
-
# delete_many (过滤 = nil, options = {}) ⇒ 结果
从集合中删除文档。
-
# delete_one (过滤 = nil, options = {}) ⇒ 结果
从集合中删除文档。
-
# distinct (field_name, 过滤 = nil, options = {}) ⇒ Array<Object>
获取特定字段的非重复值列表。
-
# drop (opts = {}) ⇒ 结果
删除该集合。
-
#estimated_document_count (options = {}) ⇒ Integer
使用集合元数据获取集合中文档的估计数量。
-
# find (filter = nil, options = {}) ⇒ CollectionView
在集合中查找文档。
-
# find_one_and_delete (过滤, options = {}) =" BSON::Document ?
通过 findAndModify 在数据库中查找单个文档并将其删除,同时返回原始文档。
-
# find_one_and_replace (过滤, replacement, options = {}) ⇒ BSON::Document
查找并替换单个文档,并返回原始文档,除非另有说明。
-
#find_one_and_update(filter, update, options = {}) ⇒ BSON::Document
通过 findAndModify 查找单个文档并进行更新,除非另有指定,否则返回原始文档。
-
#indexes (options = {}) ⇒ View::Index
获取此集合的所有索引的视图。
-
#initialize (数据库, name, options = {}) ⇒ 集合
构造函数
实例化一个新集合。
-
# insert_many (documents, options = {}) ⇒ 结果
将提供的文档插入到集合中。
-
# insert_one (文档, opts = {}) ⇒ 结果
将单个文档插入到集合中。
-
#检查⇒ string
为集合进行美观打印的string检查。
-
#命名空间⇒ string
获取集合的完全限定命名空间。
-
#parallel_scan (cursor_count, options = {}) ⇒ Array<Cursor>
对集合视图执行并行扫描。
-
# read_concern ⇒ 哈希
获取此集合实例的有效读关注。
-
# read_preference ⇒ 哈希
获取此集合的有效读取偏好(read preference)。
-
# replace_one (过滤, replacement, options = {}) ⇒ 结果
用新文档替换集合中的单个文档。
-
# server_selector ⇒ Mongo::ServerSelector
获取此集合的服务器选择器。
-
# system_collection? ⇒ 布尔
private
集合是否为系统集合。
-
#update_many(filter, update, options = {}) ⇒ Result
更新集合中的文档。
-
#update_one(filter, update, options = {}) ⇒ Result
更新集合中的单个文档。
-
# watch (pipeline = [], options = {}) ⇒ ChangeStream
从 MongoDB Server 3.6版本开始,聚合框架支持“$changeStream”管道阶段。
-
# with (new_options) ⇒ Mongo::Collection
一个新的集合实例。
-
# write_concern ⇒ Mongo::WriteConcern
获取此集合的有效写关注。
-
# write_concern_with_session (session) ⇒ Mongo::WriteConcern
private
在给定会话的情况下,获取用于对此集合进行操作的写关注(write concern)。
助手中包含的方法
QueryableEncryption中包含的方法
#maybe_create_qe_collections , #maybe_drop_emm_collections
Retryable 中包含的方法
#read_worker 、 #select_server 、 #write_worker
构造函数详情
#initialize (数据库, name, options = {}) ⇒集合
实例化一个新集合。
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 158 def 初始化(database, 名称, = {}) 提高 错误::InvalidCollectionName.new 除非 名称 if [:write] && [:write_concern] && [:write] != [:write_concern] 提高 ArgumentError, " 如果同时给出了 :write 和 : write_concern ,则它们必须相同: #{ .inspect } " end @database = database @name = 名称.to_s.冻结 @options = .dup =begin WriteConcern 对象支持 if @options[:write_concern].is_a?(WriteConcern::Base) # 缓存实例,以便我们不会不必要地重建它。 @write_concern = @options[:write_concern] @options[:write_concern] = @write_concern.options end =end @options.冻结 end |
实例属性详细信息
#数据库⇒ Mongo::Database (readonly)
返回集合所在的数据库。
46 47 48 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 46 def database @database end |
# name ⇒ string (readonly)
返回集合的名称。
49 50 51 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 49 def 名称 @name end |
# options ⇒哈希(只读)
返回集合选项。
52 53 54 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 52 def @options end |
实例方法详细信息
# == (other) ⇒ true | false
检查集合是否等于另一个对象。 将检查名称和数据库是否相等。
89 90 91 92 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 89 def ==(其他) return false 除非 其他.is_a?(Collection) 名称 == 其他.名称 && database == 其他.database && == 其他. end |
#aggregate (管道, options = {}) ⇒ View::Aggregation
对集合执行聚合。
536 537 538 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 536 def 聚合(管道, = {}) 查看.new(self, {}, ).聚合(管道, ) end |
# bulk_write (requests, options = {}) ⇒ BulkWrite::Result
执行批处理批量写入操作。
845 846 847 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 845 def bulk_write(requests, = {}) 批量写入.new(self, requests, ).执行 end |
#固定大小? ⇒ true | false
集合是否有上限?
316 317 318 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 316 def 封顶? database.read_command(:collstats => 名称).文档[0][CAPPED] end |
# count (过滤 = nil, options = {}) ⇒ Integer
请改用#count_documents 或estimated_document_count。 但请注意,切换到 #count_documents 时需要替换以下操作符:
* $where should be replaced with $expr (only works on 3.6+)
* $near should be replaced with $geoWithin with $center
* $nearSphere should be replaced with $geoWithin with $centerSphere
获取集合中匹配文档的估计数量。
640 641 642 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 640 def 数数(筛选器 = nil, = {}) 查看.new(self, 筛选器 || {}, ).数数() end |
# count_documents (过滤 = {}, options = {}) ⇒ Integer
获取与查询匹配的文档数。 与已弃用的 #count 方法不同,这将返回与过滤匹配的确切文档数(如果未提供过滤,则返回集合中文档的确切数),而不是估计值。
使用 #estimated_document_count 来检索使用集合元数据的集合中文档数量的估计值。
670 671 672 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 670 def count_documents(筛选器 = {}, = {}) 查看.new(self, 筛选器, ).count_documents() end |
# create (opts = {}) ⇒结果
强制在数据库中创建集合。
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 373 def 创建(opts = {}) # 将读取选项传递给 create 命令会导致其中断。 # 过滤掉读取选项。 此处也不包括会话,因为它获取 # 用于调用 with_session,并且不应该是 # 操作。 如果将其传递给操作,则BSON将失败 # 序列化。 # TODO 将读取选项列表放入类级常量中,当 # 我们找出它们的完整设立。 = 哈希[self..合并(merge)(opts).拒绝 do |key, 值| %w(读 read_preference read_concern 会话).包括?(key.to_s) end] # 将Ruby选项转换为服务器样式。 CREATE_COLLECTION_OPTIONS.每 do |ruby_key, server_key| if .键?(ruby_key) [server_key] = .删除(ruby_key) end end 操作 = { :create => 名称 }.合并(merge)() 操作.删除(:write) 操作.删除(:write_concern) 客户端.发送(:with_session, opts) do |会话| write_concern = if opts[:write_concern] writeConcern.获取(opts[:write_concern]) else self.write_concern end 上下文 = 操作::上下文.new(客户端: 客户端, 会话: 会话) 也许_create_qe_collections(opts[:encrypted_fields], 客户端, 会话) do |encryption_fields| 操作::创建.new( 选择器: 操作, db_name: database.名称, write_concern: write_concern, 会话: 会话, # 请注意,这些是集合选项,排序规则不是 # 取自传递给 create 方法的选项。 排序规则: [:collation] || [' collation '], encryption_fields: encryption_fields, validator: [:validator], ).执行(next_primary(nil, 会话), 上下文: 上下文) end end end |
# delete_many (filter = nil, options = {}) ⇒结果
从集合中删除文档。
889 890 891 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 889 def delete_many(筛选器 = nil, = {}) find(筛选器, ).delete_many() end |
# delete_one (过滤 = nil, options = {}) ⇒结果
从集合中删除文档。
867 868 869 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 867 def delete_one(筛选器 = nil, = {}) find(筛选器, ).delete_one() end |
# distinct (field_name, 过滤 = nil, options = {}) ⇒ Array<Object>
获取特定字段的非重复值列表。
712 713 714 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 712 def distinct(field_name, 筛选器 = nil, = {}) 查看.new(self, 筛选器 || {}, ).distinct(field_name, ) end |
# drop (opts = {}) ⇒结果
如果集合不存在,则会抑制返回的错误。
删除集合。 还会删除与集合关联的所有索引,以及关联的Queryable Encryption集合。
435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 435 def 删除(opts = {}) 客户端.发送(:with_session, opts) do |会话| 也许_drop_emm_collections(opts[:encrypted_fields], 客户端, 会话) do temp_write_concern = write_concern write_concern = if opts[:write_concern] writeConcern.获取(opts[:write_concern]) else temp_write_concern end 上下文 = 操作::上下文.new(客户端: 客户端, 会话: 会话) 操作 = 操作::删除.new({ 选择器: { :drop => 名称 }, db_name: database.名称, write_concern: write_concern, 会话: 会话, }) do_drop(操作, 会话, 上下文) end end end |
#estimated_document_count (options = {}) ⇒ Integer
使用集合元数据获取集合中文档的估计数量。
使用 #count_documents 检索集合中文档的确切数量,或对与筛选器匹配的文档进行计数。
691 692 693 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 691 def estimated_document_count( = {}) 查看.new(self, {}, ).estimated_document_count() end |
# find (过滤 = nil, options = {}) ⇒ CollectionView
在集合中查找文档。
501 502 503 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 501 def find(筛选器 = nil, = {}) 查看.new(self, 筛选器 || {}, ) end |
# find_one_and_delete (过滤, options = {}) = " BSON::Document ?
通过 findAndModify 在数据库中查找单个文档并将其删除,同时返回原始文档。
1027 1028 1029 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 1027 def find_one_and_delete(筛选器, = {}) find(筛选器, ).find_one_and_delete() end |
# find_one_and_replace (过滤, replacement, options = {}) ⇒ BSON::Document
查找并替换单个文档,并返回原始文档,除非另有说明。
1105 1106 1107 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 1105 def find_one_and_replace(筛选器, 替换, = {}) find(筛选器, ).find_one_and_update(替换, ) end |
# find_one_and_update (filter, update, options = {}) ⇒ BSON::Document
通过 findAndModify 查找单个文档并进行更新,除非另有指定,否则返回原始文档。
1067 1068 1069 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 1067 def find_one_and_update(筛选器, update, = {}) find(筛选器, ).find_one_and_update(update, ) end |
#indexes(options = {}) ⇒ View::Index
获取此集合的所有索引的视图。 可以迭代或具有更多操作。
729 730 731 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 729 def 索引( = {}) Index::查看.new(self, ) end |
# insert_many (documents, options = {}) ⇒结果
将提供的文档插入到集合中。
817 818 819 820 821 822 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 817 def insert_many(文档, = {}) 查询缓存.clear_namespace(namespace) inserts = 文档.map{ |doc| { :insert_one => doc }} bulk_write(inserts, ) end |
# insert_one (文档, opts = {}) ⇒结果
将单个文档插入到集合中。
764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 764 def insert_one(文档, opts = {}) 查询缓存.clear_namespace(namespace) 客户端.发送(:with_session, opts) do |会话| write_concern = if opts[:write_concern] writeConcern.获取(opts[:write_concern]) else write_concern_with_session(会话) end if 文档.nil? 提高 ArgumentError, "要插入的文档不能为 nil " end 上下文 = 操作::上下文.new(客户端: 客户端, 会话: 会话) write_with_retry(write_concern, 上下文: 上下文) do |连接, txn_num, 上下文| 操作::Insert.new( :documents => [ 文档 ], :db_name => database.名称, :coll_name => 名称, :write_concern => write_concern, :bypass_document_validation => !!opts[:bypass_document_validation], :options => opts, :id_generator => 客户端.[:id_generator], :session => 会话, :txn_num => txn_num, :comment => opts[:comment] ).execute_with_connection(连接, 上下文: 上下文) end end end |
#检查⇒ string
为集合进行美观打印的string检查。
741 742 743 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 741 def 检查 " #<Mongo::Collection: 0 x #{ object_id } 命名空间= #{ 命名空间 } > " end |
#命名空间⇒ string
获取集合的完全限定命名空间。
1117 1118 1119 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 1117 def namespace " #{ 数据库 . name } . #{ name } " end |
# parallel_scan (cursor_count, options = {}) ⇒ Array< Cursor >
对集合视图执行并行扫描。
返回最多包含 cursor_count 个可并发迭代的游标的列表。 只要在扫描期间未修改集合,每个文档就会在游标的一个结果集中出现一次。
912 913 914 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 912 def parallel_scan(cursor_count, = {}) find({}, ).发送(:parallel_scan, cursor_count, ) end |
# read_concern ⇒哈希
获取此集合实例的有效读关注。
如果集合选项中提供了读关注,则返回该读关注,否则将返回数据库的有效读关注。
188 189 190 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 188 def read_concern [:read_concern] || database.read_concern end |
# read_preference ⇒哈希
获取此集合的有效读取偏好(read preference)。
如果集合选项中提供了读取偏好,则返回该读取偏好,否则将返回数据库的有效读取偏好。
216 217 218 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 216 def read_preference @read_preference ||= [:read] || database.read_preference end |
# replace_one (过滤, replacement, options = {}) ⇒结果
用新文档替换集合中的单个文档。
939 940 941 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 939 def replace_one(筛选器, 替换, = {}) find(筛选器, ).replace_one(替换, ) end |
# server_selector ⇒ Mongo::ServerSelector
获取此集合的服务器选择器。
200 201 202 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 200 def server_selector @server_selector ||= ServerSelector.获取(read_preference || database.server_selector) end |
# system_collection? ⇒布尔
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
集合是否为系统集合。
1126 1127 1128 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 1126 def system_collection? 名称.start_with?('系统。 ') end |
#update_many(filter, update, options = {}) ⇒ Result
更新集合中的文档。
968 969 970 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 968 def update_many(筛选器, update, = {}) find(筛选器, ).update_many(update, ) end |
#update_one(filter, update, options = {}) ⇒ Result
更新集合中的单个文档。
997 998 999 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 997 def update_one(筛选器, update, = {}) find(筛选器, ).update_one(update, ) end |
# watch (管道 = [], options = {}) ⇒ ChangeStream
变更流只允许“多数”读关注(read concern)。
出于支持可恢复性的目的,此辅助方法优于使用 $changeStream 阶段运行原始聚合。
从 MongoDB Server 3.6版本开始,聚合框架支持“$changeStream”管道阶段。 此阶段允许用户请求为特定集合的所有更改发送通知。
607 608 609 610 611 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 607 def 观看(管道 = [], = {}) = .dup [:await_data] = true if [:max_await_time_ms] 查看::变更流.new(查看.new(self, {}, ), 管道, nil, ) end |
# with (new_options) ⇒ Mongo::Collection
返回 一个新的集合实例。
294 295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 294 def 通过() .密钥.每 do |k| 提高 错误::UnchangeableCollectionOption.new(k) 除非 CHANGEABLE_OPTIONS.包括?(k) end = @options.dup if [:write] && [:write_concern] .删除(:write) end if [:write_concern] && [:write] .删除(:write_concern) end Collection.new(database, 名称, .update()) end |
# write_concern ⇒ Mongo::WriteConcern
获取此集合的有效写关注。
如果集合选项中提供了写关注,则返回该写关注,否则将返回数据库的有效写关注。
232 233 234 235 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 232 def write_concern @write_concern ||= writeConcern.获取( [:write_concern] || [:write] || database.write_concern) end |
# write_concern_with_session (session) ⇒ Mongo::WriteConcern
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
在给定会话的情况下,获取用于对此集合进行操作的写关注(write concern)。
如果会话位于事务中并且集合有未确认的写关注,请删除写关注的 :w 选项。 否则,返回未修改的写关注。
248 249 250 251 252 253 254 255 256 257 258 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/collection.rb', line 248 def write_concern_with_session(会话) wc = write_concern if 会话 && 会话.in_transaction? if wc && !wc.已确认? opts = wc..dup opts.删除(:w) return writeConcern.获取(opts) end end wc end |