mongo 2.1.0.beta → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +10 -3
- data/Rakefile +1 -7
- data/lib/mongo/address/ipv4.rb +6 -1
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/address.rb +32 -10
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +7 -3
- data/lib/mongo/auth/scram/conversation.rb +9 -3
- data/lib/mongo/auth/user/view.rb +23 -2
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +61 -8
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +132 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/bulk_write.rb +164 -23
- data/lib/mongo/client.rb +75 -18
- data/lib/mongo/cluster/topology/replica_set.rb +8 -6
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/cluster.rb +85 -5
- data/lib/mongo/collection/view/aggregation.rb +19 -45
- data/lib/mongo/collection/view/builder/aggregation.rb +98 -0
- data/lib/mongo/collection/view/builder/find_command.rb +111 -0
- data/lib/mongo/collection/view/builder/flags.rb +62 -0
- data/lib/mongo/collection/view/builder/map_reduce.rb +134 -0
- data/lib/mongo/collection/view/builder/modifiers.rb +80 -0
- data/lib/mongo/collection/view/builder/op_query.rb +83 -0
- data/lib/mongo/collection/view/builder.rb +20 -0
- data/lib/mongo/collection/view/explainable.rb +15 -0
- data/lib/mongo/collection/view/immutable.rb +4 -11
- data/lib/mongo/collection/view/iterable.rb +40 -5
- data/lib/mongo/collection/view/map_reduce.rb +67 -37
- data/lib/mongo/collection/view/readable.rb +114 -100
- data/lib/mongo/collection/view/writable.rb +46 -22
- data/lib/mongo/collection/view.rb +25 -22
- data/lib/mongo/collection.rb +130 -12
- data/lib/mongo/cursor/builder/get_more_command.rb +71 -0
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +62 -0
- data/lib/mongo/cursor/builder/op_get_more.rb +61 -0
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +56 -0
- data/lib/mongo/cursor/builder.rb +18 -0
- data/lib/mongo/cursor.rb +76 -21
- data/lib/mongo/database/view.rb +11 -6
- data/lib/mongo/database.rb +16 -6
- data/lib/mongo/dbref.rb +9 -9
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
- data/lib/mongo/error/file_not_found.rb +37 -0
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/invalid_write_concern.rb +35 -0
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +33 -2
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/error.rb +8 -0
- data/lib/mongo/grid/file/chunk.rb +9 -9
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/file.rb +12 -9
- data/lib/mongo/grid/fs_bucket.rb +448 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/index/view.rb +7 -4
- data/lib/mongo/index.rb +5 -0
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring/command_log_subscriber.rb +38 -14
- data/lib/mongo/monitoring/event/command_started.rb +2 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +24 -2
- data/lib/mongo/monitoring/event/secure.rb +58 -0
- data/lib/mongo/monitoring/event.rb +1 -0
- data/lib/mongo/monitoring/publishable.rb +22 -12
- data/lib/mongo/monitoring.rb +1 -5
- data/lib/mongo/operation/commands/aggregate/result.rb +89 -0
- data/lib/mongo/operation/commands/aggregate.rb +64 -0
- data/lib/mongo/operation/commands/collections_info/result.rb +41 -0
- data/lib/mongo/operation/{read → commands}/collections_info.rb +5 -3
- data/lib/mongo/operation/commands/command.rb +47 -0
- data/lib/mongo/operation/commands/find/result.rb +62 -0
- data/lib/mongo/operation/commands/find.rb +27 -0
- data/lib/mongo/operation/commands/get_more/result.rb +62 -0
- data/lib/mongo/operation/commands/get_more.rb +27 -0
- data/lib/mongo/operation/{read → commands}/indexes.rb +9 -6
- data/lib/mongo/operation/{list_collections → commands/list_collections}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_collections.rb +4 -32
- data/lib/mongo/operation/{list_indexes → commands/list_indexes}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_indexes.rb +3 -33
- data/lib/mongo/operation/commands/map_reduce/result.rb +119 -0
- data/lib/mongo/operation/commands/map_reduce.rb +49 -0
- data/lib/mongo/operation/commands/parallel_scan/result.rb +64 -0
- data/lib/mongo/operation/commands/parallel_scan.rb +52 -0
- data/lib/mongo/operation/commands/user_query.rb +71 -0
- data/lib/mongo/operation/commands/users_info/result.rb +38 -0
- data/lib/mongo/operation/commands/users_info.rb +48 -0
- data/lib/mongo/operation/commands.rb +26 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/object_id_generator.rb +36 -0
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/operation/read/query/result.rb +40 -0
- data/lib/mongo/operation/read/query.rb +4 -21
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/result.rb +43 -1
- data/lib/mongo/operation/specifiable.rb +59 -1
- data/lib/mongo/operation/write/bulk/bulkable.rb +83 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +67 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +3 -3
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +4 -3
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +6 -4
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +6 -29
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +49 -0
- data/lib/mongo/operation/write/idable.rb +24 -2
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +13 -36
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation.rb +33 -5
- data/lib/mongo/options/mapper.rb +26 -2
- data/lib/mongo/options/redacted.rb +156 -0
- data/lib/mongo/options.rb +1 -0
- data/lib/mongo/protocol/bit_vector.rb +11 -9
- data/lib/mongo/protocol/delete.rb +78 -3
- data/lib/mongo/protocol/get_more.rb +59 -2
- data/lib/mongo/protocol/insert.rb +73 -1
- data/lib/mongo/protocol/kill_cursors.rb +66 -4
- data/lib/mongo/protocol/message.rb +44 -20
- data/lib/mongo/protocol/query.rb +153 -65
- data/lib/mongo/protocol/reply.rb +92 -1
- data/lib/mongo/protocol/serializers.rb +49 -40
- data/lib/mongo/protocol/update.rb +93 -1
- data/lib/mongo/retryable.rb +101 -0
- data/lib/mongo/server/connectable.rb +28 -8
- data/lib/mongo/server/connection.rb +52 -10
- data/lib/mongo/server/connection_pool/queue.rb +15 -0
- data/lib/mongo/server/connection_pool.rb +12 -15
- data/lib/mongo/server/description/features.rb +4 -2
- data/lib/mongo/server/description.rb +39 -3
- data/lib/mongo/server/monitor/connection.rb +49 -28
- data/lib/mongo/server/monitor.rb +3 -14
- data/lib/mongo/server.rb +31 -4
- data/lib/mongo/server_selector/selectable.rb +58 -32
- data/lib/mongo/server_selector.rb +19 -10
- data/lib/mongo/socket/ssl.rb +4 -1
- data/lib/mongo/socket/tcp.rb +2 -2
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/socket.rb +11 -4
- data/lib/mongo/uri.rb +245 -139
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern.rb +21 -6
- data/lib/mongo.rb +4 -4
- data/mongo.gemspec +1 -2
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +284 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +385 -161
- data/spec/mongo/client_spec.rb +193 -23
- data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
- data/spec/mongo/collection/view/builder/find_command_spec.rb +167 -0
- data/spec/mongo/collection/view/builder/flags_spec.rb +106 -0
- data/spec/mongo/collection/view/builder/modifiers_spec.rb +210 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +154 -0
- data/spec/mongo/collection/view/explainable_spec.rb +1 -2
- data/spec/mongo/collection/view/immutable_spec.rb +54 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +104 -9
- data/spec/mongo/collection/view/readable_spec.rb +109 -112
- data/spec/mongo/collection/view_spec.rb +119 -487
- data/spec/mongo/collection_spec.rb +1002 -33
- data/spec/mongo/command_monitoring_spec.rb +64 -0
- data/spec/mongo/connection_string_spec.rb +115 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +160 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +52 -0
- data/spec/mongo/cursor_spec.rb +10 -60
- data/spec/mongo/database_spec.rb +81 -12
- data/spec/mongo/dbref_spec.rb +4 -4
- data/spec/mongo/grid/file/chunk_spec.rb +6 -6
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/index/view_spec.rb +41 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
- data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
- data/spec/mongo/operation/{aggregate → commands/aggregate}/result_spec.rb +1 -1
- data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +1 -19
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
- data/spec/mongo/operation/read/get_more_spec.rb +0 -16
- data/spec/mongo/operation/read/query_spec.rb +19 -16
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/result_spec.rb +19 -0
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +17 -28
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +7 -18
- data/spec/mongo/operation/write/command/delete_spec.rb +18 -9
- data/spec/mongo/operation/write/command/insert_spec.rb +18 -9
- data/spec/mongo/operation/write/command/update_spec.rb +18 -9
- data/spec/mongo/operation/write/delete_spec.rb +3 -3
- data/spec/mongo/operation/write/insert_spec.rb +0 -11
- data/spec/mongo/operation/write/update_spec.rb +6 -6
- data/spec/mongo/options/redacted_spec.rb +350 -0
- data/spec/mongo/protocol/delete_spec.rb +4 -4
- data/spec/mongo/protocol/get_more_spec.rb +4 -4
- data/spec/mongo/protocol/insert_spec.rb +3 -3
- data/spec/mongo/protocol/kill_cursors_spec.rb +8 -6
- data/spec/mongo/protocol/query_spec.rb +21 -7
- data/spec/mongo/protocol/update_spec.rb +5 -5
- data/spec/mongo/retryable_spec.rb +221 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
- data/spec/mongo/server/connection_pool_spec.rb +42 -6
- data/spec/mongo/server/connection_spec.rb +86 -1
- data/spec/mongo/server/description/features_spec.rb +25 -0
- data/spec/mongo/server/description_spec.rb +42 -0
- data/spec/mongo/server/monitor_spec.rb +44 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +25 -59
- data/spec/mongo/server_selection_rtt_spec.rb +37 -57
- data/spec/mongo/server_selection_spec.rb +5 -3
- data/spec/mongo/server_selector/nearest_spec.rb +35 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
- data/spec/mongo/server_selector/primary_spec.rb +21 -14
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
- data/spec/mongo/server_selector/secondary_spec.rb +24 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/server_spec.rb +78 -15
- data/spec/mongo/socket/ssl_spec.rb +101 -57
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +271 -59
- data/spec/mongo/write_concern_spec.rb +126 -0
- data/spec/spec_helper.rb +29 -23
- data/spec/support/authorization.rb +4 -5
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +268 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/command_monitoring.rb +373 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud/read.rb +14 -10
- data/spec/support/crud/write.rb +36 -9
- data/spec/support/crud.rb +10 -2
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/matchers.rb +2 -2
- data/spec/support/sdam/rs/equal_electionids.yml +1 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/rsother_discovered.yml +24 -3
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/stepdown_change_set_name.yml +59 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +3 -1
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +192 -0
- data/spec/support/shared/protocol.rb +5 -5
- data/spec/support/shared/server_selector.rb +78 -13
- data/spec/support/travis.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +211 -72
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
- data/lib/mongo/bulk_write/deletable.rb +0 -57
- data/lib/mongo/bulk_write/insertable.rb +0 -49
- data/lib/mongo/bulk_write/replacable.rb +0 -58
- data/lib/mongo/bulk_write/updatable.rb +0 -69
- data/lib/mongo/grid/fs.rb +0 -146
- data/lib/mongo/operation/aggregate/result.rb +0 -103
- data/lib/mongo/operation/aggregate.rb +0 -108
- data/lib/mongo/operation/command.rb +0 -61
- data/lib/mongo/operation/map_reduce/result.rb +0 -122
- data/lib/mongo/operation/map_reduce.rb +0 -95
- data/lib/mongo/operation/parallel_scan/result.rb +0 -72
- data/lib/mongo/operation/parallel_scan.rb +0 -76
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
- data/spec/mongo/operation/aggregate_spec.rb +0 -127
data/lib/mongo/collection.rb
CHANGED
@@ -12,6 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
require 'mongo/bulk_write'
|
15
16
|
require 'mongo/collection/view'
|
16
17
|
|
17
18
|
module Mongo
|
@@ -22,6 +23,17 @@ module Mongo
|
|
22
23
|
# @since 2.0.0
|
23
24
|
class Collection
|
24
25
|
extend Forwardable
|
26
|
+
include Retryable
|
27
|
+
|
28
|
+
# The capped option.
|
29
|
+
#
|
30
|
+
# @since 2.1.0
|
31
|
+
CAPPED = 'capped'.freeze
|
32
|
+
|
33
|
+
# The ns field constant.
|
34
|
+
#
|
35
|
+
# @since 2.1.0
|
36
|
+
NS = 'ns'.freeze
|
25
37
|
|
26
38
|
# @return [ Mongo::Database ] The database the collection resides in.
|
27
39
|
attr_reader :database
|
@@ -33,7 +45,7 @@ module Mongo
|
|
33
45
|
attr_reader :options
|
34
46
|
|
35
47
|
# Get client, cluster, read preference, and write concern from client.
|
36
|
-
def_delegators :database, :client, :cluster
|
48
|
+
def_delegators :database, :client, :cluster
|
37
49
|
|
38
50
|
# Delegate to the cluster for the next primary.
|
39
51
|
def_delegators :cluster, :next_primary
|
@@ -41,6 +53,11 @@ module Mongo
|
|
41
53
|
# Convenience delegators to find.
|
42
54
|
def_delegators :find, :parallel_scan
|
43
55
|
|
56
|
+
# Options that can be updated on a new Collection instance via the #with method.
|
57
|
+
#
|
58
|
+
# @since 2.1.0
|
59
|
+
CHANGEABLE_OPTIONS = [ :read, :read_concern, :write ].freeze
|
60
|
+
|
44
61
|
# Check if a collection is equal to another object. Will check the name and
|
45
62
|
# the database for equality.
|
46
63
|
#
|
@@ -74,6 +91,65 @@ module Mongo
|
|
74
91
|
@options = options.freeze
|
75
92
|
end
|
76
93
|
|
94
|
+
# Get the read concern for this collection instance.
|
95
|
+
#
|
96
|
+
# @example Get the read concern.
|
97
|
+
# collection.read_concern
|
98
|
+
#
|
99
|
+
# @return [ Hash ] The read concern.
|
100
|
+
#
|
101
|
+
# @since 2.2.0
|
102
|
+
def read_concern
|
103
|
+
@read_concern ||= options[:read_concern]
|
104
|
+
end
|
105
|
+
|
106
|
+
# Get the read preference on this collection.
|
107
|
+
#
|
108
|
+
# @example Get the read preference.
|
109
|
+
# collection.read_preference
|
110
|
+
#
|
111
|
+
# @return [ Mongo::ServerSelector ] The read preference.
|
112
|
+
#
|
113
|
+
# @since 2.0.0
|
114
|
+
def read_preference
|
115
|
+
@read_preference ||= options[:read] ? ServerSelector.get(client.options.merge(options[:read])) :
|
116
|
+
database.read_preference
|
117
|
+
end
|
118
|
+
|
119
|
+
# Get the write concern on this collection.
|
120
|
+
#
|
121
|
+
# @example Get the write concern.
|
122
|
+
# collection.write_concern
|
123
|
+
#
|
124
|
+
# @return [ Mongo::WriteConcern ] The write concern.
|
125
|
+
#
|
126
|
+
# @since 2.0.0
|
127
|
+
def write_concern
|
128
|
+
@write_concern ||= options[:write] ? WriteConcern.get(options[:write]) :
|
129
|
+
database.write_concern
|
130
|
+
end
|
131
|
+
|
132
|
+
# Provides a new collection with either a new read preference or new write concern
|
133
|
+
# merged over the existing read preference / write concern.
|
134
|
+
#
|
135
|
+
# @example Get a collection with changed read preference.
|
136
|
+
# collection.with(:read => { :mode => :primary_preferred })
|
137
|
+
#
|
138
|
+
# @example Get a collection with changed write concern.
|
139
|
+
# collection.with(:write => { w: 3 })
|
140
|
+
|
141
|
+
# @param [ Hash ] new_options The new options to use.
|
142
|
+
#
|
143
|
+
# @return [ Mongo::Collection ] A new collection instance.
|
144
|
+
#
|
145
|
+
# @since 2.1.0
|
146
|
+
def with(new_options)
|
147
|
+
new_options.keys.each do |k|
|
148
|
+
raise Error::UnchangeableCollectionOption.new(k) unless CHANGEABLE_OPTIONS.include?(k)
|
149
|
+
end
|
150
|
+
Collection.new(database, name, options.merge(new_options))
|
151
|
+
end
|
152
|
+
|
77
153
|
# Is the collection capped?
|
78
154
|
#
|
79
155
|
# @example Is the collection capped?
|
@@ -83,7 +159,7 @@ module Mongo
|
|
83
159
|
#
|
84
160
|
# @since 2.0.0
|
85
161
|
def capped?
|
86
|
-
database.command(:collstats => name).documents[0][
|
162
|
+
database.command(:collstats => name).documents[0][CAPPED]
|
87
163
|
end
|
88
164
|
|
89
165
|
# Force the collection to be created in the database.
|
@@ -171,6 +247,8 @@ module Mongo
|
|
171
247
|
# aggregation to run.
|
172
248
|
# @option options [ true, false ] :use_cursor Indicates whether the command will request that the server
|
173
249
|
# provide results using a cursor.
|
250
|
+
# @option options [ true, false ] :bypass_document_validation Whether or
|
251
|
+
# not to skip document level validation.
|
174
252
|
#
|
175
253
|
# @return [ Aggregation ] The aggregation object.
|
176
254
|
#
|
@@ -256,13 +334,17 @@ module Mongo
|
|
256
334
|
#
|
257
335
|
# @since 2.0.0
|
258
336
|
def insert_one(document, options = {})
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
337
|
+
write_with_retry do
|
338
|
+
Operation::Write::Insert.new(
|
339
|
+
:documents => [ document ],
|
340
|
+
:db_name => database.name,
|
341
|
+
:coll_name => name,
|
342
|
+
:write_concern => write_concern,
|
343
|
+
:bypass_document_validation => !!options[:bypass_document_validation],
|
344
|
+
:options => options,
|
345
|
+
:id_generator => client.options[:id_generator]
|
346
|
+
).execute(next_primary.context)
|
347
|
+
end
|
266
348
|
end
|
267
349
|
|
268
350
|
# Insert the provided documents into the collection.
|
@@ -286,19 +368,21 @@ module Mongo
|
|
286
368
|
# @example Execute a bulk write.
|
287
369
|
# collection.bulk_write(operations, options)
|
288
370
|
#
|
289
|
-
# @param [ Array<Hash> ]
|
371
|
+
# @param [ Array<Hash> ] requests The bulk write requests.
|
290
372
|
# @param [ Hash ] options The options.
|
291
373
|
#
|
292
374
|
# @option options [ true, false ] :ordered Whether the operations
|
293
375
|
# should be executed in order.
|
294
376
|
# @option options [ Hash ] :write_concern The write concern options.
|
295
377
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
378
|
+
# @option options [ true, false ] :bypass_document_validation Whether or
|
379
|
+
# not to skip document level validation.
|
296
380
|
#
|
297
381
|
# @return [ BulkWrite::Result ] The result of the operation.
|
298
382
|
#
|
299
383
|
# @since 2.0.0
|
300
|
-
def bulk_write(
|
301
|
-
BulkWrite.
|
384
|
+
def bulk_write(requests, options = {})
|
385
|
+
BulkWrite.new(self, requests, options).execute
|
302
386
|
end
|
303
387
|
|
304
388
|
# Remove a document from the collection.
|
@@ -329,6 +413,24 @@ module Mongo
|
|
329
413
|
find(filter).delete_many
|
330
414
|
end
|
331
415
|
|
416
|
+
# Execute a parallel scan on the collection view.
|
417
|
+
#
|
418
|
+
# Returns a list of up to cursor_count cursors that can be iterated concurrently.
|
419
|
+
# As long as the collection is not modified during scanning, each document appears once
|
420
|
+
# in one of the cursors' result sets.
|
421
|
+
#
|
422
|
+
# @example Execute a parallel collection scan.
|
423
|
+
# collection.parallel_scan(2)
|
424
|
+
#
|
425
|
+
# @param [ Integer ] cursor_count The max number of cursors to return.
|
426
|
+
#
|
427
|
+
# @return [ Array<Cursor> ] An array of cursors.
|
428
|
+
#
|
429
|
+
# @since 2.1
|
430
|
+
def parallel_scan(cursor_count)
|
431
|
+
find.send(:parallel_scan, cursor_count)
|
432
|
+
end
|
433
|
+
|
332
434
|
# Replaces a single document in the collection with the new document.
|
333
435
|
#
|
334
436
|
# @example Replace a single document.
|
@@ -340,6 +442,8 @@ module Mongo
|
|
340
442
|
#
|
341
443
|
# @option options [ true, false ] :upsert Whether to upsert if the
|
342
444
|
# document doesn't exist.
|
445
|
+
# @option options [ true, false ] :bypass_document_validation Whether or
|
446
|
+
# not to skip document level validation.
|
343
447
|
#
|
344
448
|
# @return [ Result ] The response from the database.
|
345
449
|
#
|
@@ -359,6 +463,8 @@ module Mongo
|
|
359
463
|
#
|
360
464
|
# @option options [ true, false ] :upsert Whether to upsert if the
|
361
465
|
# document doesn't exist.
|
466
|
+
# @option options [ true, false ] :bypass_document_validation Whether or
|
467
|
+
# not to skip document level validation.
|
362
468
|
#
|
363
469
|
# @return [ Result ] The response from the database.
|
364
470
|
#
|
@@ -378,6 +484,8 @@ module Mongo
|
|
378
484
|
#
|
379
485
|
# @option options [ true, false ] :upsert Whether to upsert if the
|
380
486
|
# document doesn't exist.
|
487
|
+
# @option options [ true, false ] :bypass_document_validation Whether or
|
488
|
+
# not to skip document level validation.
|
381
489
|
#
|
382
490
|
# @return [ Result ] The response from the database.
|
383
491
|
#
|
@@ -400,6 +508,8 @@ module Mongo
|
|
400
508
|
# @option options [ Hash ] :projection The fields to include or exclude in the returned doc.
|
401
509
|
# @option options [ Hash ] :sort The key and direction pairs by which the result set
|
402
510
|
# will be sorted.
|
511
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
512
|
+
# Defaults to the collection's write concern.
|
403
513
|
#
|
404
514
|
# @return [ BSON::Document, nil ] The document, if found.
|
405
515
|
#
|
@@ -428,6 +538,10 @@ module Mongo
|
|
428
538
|
# will be sorted.
|
429
539
|
# @option options [ Symbol ] :return_document Either :before or :after.
|
430
540
|
# @option options [ true, false ] :upsert Whether to upsert if the document doesn't exist.
|
541
|
+
# @option options [ true, false ] :bypass_document_validation Whether or
|
542
|
+
# not to skip document level validation.
|
543
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
544
|
+
# Defaults to the collection's write concern.
|
431
545
|
#
|
432
546
|
# @return [ BSON::Document ] The document.
|
433
547
|
#
|
@@ -456,6 +570,10 @@ module Mongo
|
|
456
570
|
# will be sorted.
|
457
571
|
# @option options [ Symbol ] :return_document Either :before or :after.
|
458
572
|
# @option options [ true, false ] :upsert Whether to upsert if the document doesn't exist.
|
573
|
+
# @option options [ true, false ] :bypass_document_validation Whether or
|
574
|
+
# not to skip document level validation.
|
575
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
576
|
+
# Defaults to the collection's write concern.
|
459
577
|
#
|
460
578
|
# @return [ BSON::Document ] The document.
|
461
579
|
#
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Cursor
|
17
|
+
module Builder
|
18
|
+
|
19
|
+
# Generates a specification for a get more command.
|
20
|
+
#
|
21
|
+
# @since 2.2.0
|
22
|
+
class GetMoreCommand
|
23
|
+
extend Forwardable
|
24
|
+
|
25
|
+
# @return [ Cursor ] cursor The cursor.
|
26
|
+
attr_reader :cursor
|
27
|
+
|
28
|
+
def_delegators :@cursor, :batch_size, :collection_name, :database, :view
|
29
|
+
|
30
|
+
# Create the new builder.
|
31
|
+
#
|
32
|
+
# @example Create the builder.
|
33
|
+
# GetMoreCommand.new(cursor)
|
34
|
+
#
|
35
|
+
# @param [ Cursor ] cursor The cursor.
|
36
|
+
#
|
37
|
+
# @since 2.2.0
|
38
|
+
def initialize(cursor)
|
39
|
+
@cursor = cursor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get the specification.
|
43
|
+
#
|
44
|
+
# @example Get the specification.
|
45
|
+
# get_more_command.specification
|
46
|
+
#
|
47
|
+
# @return [ Hash ] The spec.
|
48
|
+
#
|
49
|
+
# @since 2.2.0
|
50
|
+
def specification
|
51
|
+
{ selector: get_more_command, db_name: database.name }
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def get_more_command
|
57
|
+
command = { :getMore => cursor.id, :collection => collection_name }
|
58
|
+
command[:batchSize] = batch_size if batch_size
|
59
|
+
# If the max_await_time_ms option is set, then we set maxTimeMS on
|
60
|
+
# the get more command.
|
61
|
+
if view.respond_to?(:max_await_time_ms)
|
62
|
+
if view.max_await_time_ms && view.options[:await_data]
|
63
|
+
command[:maxTimeMS] = view.max_await_time_ms
|
64
|
+
end
|
65
|
+
end
|
66
|
+
command
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Cursor
|
17
|
+
module Builder
|
18
|
+
|
19
|
+
# Generates a specification for a kill cursors command.
|
20
|
+
#
|
21
|
+
# @since 2.2.0
|
22
|
+
class KillCursorsCommand
|
23
|
+
extend Forwardable
|
24
|
+
|
25
|
+
# @return [ Cursor ] cursor The cursor.
|
26
|
+
attr_reader :cursor
|
27
|
+
|
28
|
+
def_delegators :@cursor, :collection_name, :database
|
29
|
+
|
30
|
+
# Create the new builder.
|
31
|
+
#
|
32
|
+
# @example Create the builder.
|
33
|
+
# KillCursorsCommand.new(cursor)
|
34
|
+
#
|
35
|
+
# @param [ Cursor ] cursor The cursor.
|
36
|
+
#
|
37
|
+
# @since 2.2.0
|
38
|
+
def initialize(cursor)
|
39
|
+
@cursor = cursor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get the specification.
|
43
|
+
#
|
44
|
+
# @example Get the specification.
|
45
|
+
# kill_cursors_command.specification
|
46
|
+
#
|
47
|
+
# @return [ Hash ] The spec.
|
48
|
+
#
|
49
|
+
# @since 2.2.0
|
50
|
+
def specification
|
51
|
+
{ selector: kill_cursors_command, db_name: database.name }
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def kill_cursors_command
|
57
|
+
{ :killCursors => collection_name, :cursors => [ cursor.id ] }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Cursor
|
17
|
+
module Builder
|
18
|
+
|
19
|
+
# Encapsulates behaviour around generating an OP_GET_MORE specification.
|
20
|
+
#
|
21
|
+
# @since 2.2.0
|
22
|
+
class OpGetMore
|
23
|
+
extend Forwardable
|
24
|
+
|
25
|
+
# @return [ Cursor ] cursor The cursor.
|
26
|
+
attr_reader :cursor
|
27
|
+
|
28
|
+
def_delegators :@cursor, :collection_name, :database, :to_return
|
29
|
+
|
30
|
+
# Create the new builder.
|
31
|
+
#
|
32
|
+
# @example Create the builder.
|
33
|
+
# OpGetMore.new(cursor)
|
34
|
+
#
|
35
|
+
# @param [ Cursor ] cursor The cursor.
|
36
|
+
#
|
37
|
+
# @since 2.2.0
|
38
|
+
def initialize(cursor)
|
39
|
+
@cursor = cursor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get the specification.
|
43
|
+
#
|
44
|
+
# @example Get the specification.
|
45
|
+
# op_get_more.specification
|
46
|
+
#
|
47
|
+
# @return [ Hash ] The specification.
|
48
|
+
#
|
49
|
+
# @since 2.2.0
|
50
|
+
def specification
|
51
|
+
{
|
52
|
+
:to_return => to_return,
|
53
|
+
:cursor_id => cursor.id,
|
54
|
+
:db_name => database.name,
|
55
|
+
:coll_name => collection_name
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class Cursor
|
17
|
+
module Builder
|
18
|
+
|
19
|
+
# Encapsulates behaviour around generating an OP_KILL_CURSORS specification.
|
20
|
+
#
|
21
|
+
# @since 2.2.0
|
22
|
+
class OpKillCursors
|
23
|
+
extend Forwardable
|
24
|
+
|
25
|
+
# @return [ Cursor ] cursor The cursor.
|
26
|
+
attr_reader :cursor
|
27
|
+
|
28
|
+
def_delegators :@cursor, :collection_name, :database
|
29
|
+
|
30
|
+
# Create the new builder.
|
31
|
+
#
|
32
|
+
# @example Create the builder.
|
33
|
+
# OpKillCursors.new(cursor)
|
34
|
+
#
|
35
|
+
# @param [ Cursor ] cursor The cursor.
|
36
|
+
#
|
37
|
+
# @since 2.2.0
|
38
|
+
def initialize(cursor)
|
39
|
+
@cursor = cursor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get the specification.
|
43
|
+
#
|
44
|
+
# @example Get the specification.
|
45
|
+
# op_kill_cursors.specification
|
46
|
+
#
|
47
|
+
# @return [ Hash ] The specification.
|
48
|
+
#
|
49
|
+
# @since 2.2.0
|
50
|
+
def specification
|
51
|
+
{ :coll_name => collection_name, :db_name => database.name, :cursor_ids => [ cursor.id ] }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'mongo/cursor/builder/op_get_more'
|
16
|
+
require 'mongo/cursor/builder/op_kill_cursors'
|
17
|
+
require 'mongo/cursor/builder/get_more_command'
|
18
|
+
require 'mongo/cursor/builder/kill_cursors_command'
|
data/lib/mongo/cursor.rb
CHANGED
@@ -12,6 +12,8 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
require 'mongo/cursor/builder'
|
16
|
+
|
15
17
|
module Mongo
|
16
18
|
|
17
19
|
# Client-side representation of an iterator over a query result set on
|
@@ -35,6 +37,9 @@ module Mongo
|
|
35
37
|
def_delegators :@view, :collection, :limit
|
36
38
|
def_delegators :collection, :client, :database
|
37
39
|
|
40
|
+
# @return [ Collection::View ] view The collection view.
|
41
|
+
attr_reader :view
|
42
|
+
|
38
43
|
# Creates a +Cursor+ object.
|
39
44
|
#
|
40
45
|
# @example Instantiate the cursor.
|
@@ -82,12 +87,71 @@ module Mongo
|
|
82
87
|
end
|
83
88
|
end
|
84
89
|
|
85
|
-
|
86
|
-
|
90
|
+
# Get the batch size.
|
91
|
+
#
|
92
|
+
# @example Get the batch size.
|
93
|
+
# cursor.batch_size
|
94
|
+
#
|
95
|
+
# @return [ Integer ] The batch size.
|
96
|
+
#
|
97
|
+
# @since 2.2.0
|
87
98
|
def batch_size
|
88
99
|
@view.batch_size && @view.batch_size > 0 ? @view.batch_size : limit
|
89
100
|
end
|
90
101
|
|
102
|
+
# Is the cursor closed?
|
103
|
+
#
|
104
|
+
# @example Is the cursor closed?
|
105
|
+
# cursor.closed?
|
106
|
+
#
|
107
|
+
# @return [ true, false ] If the cursor is closed.
|
108
|
+
#
|
109
|
+
# @since 2.2.0
|
110
|
+
def closed?
|
111
|
+
!more?
|
112
|
+
end
|
113
|
+
|
114
|
+
# Get the parsed collection name.
|
115
|
+
#
|
116
|
+
# @example Get the parsed collection name.
|
117
|
+
# cursor.coll_name
|
118
|
+
#
|
119
|
+
# @return [ String ] The collection name.
|
120
|
+
#
|
121
|
+
# @since 2.2.0
|
122
|
+
def collection_name
|
123
|
+
@coll_name || collection.name
|
124
|
+
end
|
125
|
+
|
126
|
+
# Get the cursor id.
|
127
|
+
#
|
128
|
+
# @example Get the cursor id.
|
129
|
+
# cursor.id
|
130
|
+
#
|
131
|
+
# @note A cursor id of 0 means the cursor was closed on the server.
|
132
|
+
#
|
133
|
+
# @return [ Integer ] The cursor id.
|
134
|
+
#
|
135
|
+
# @since 2.2.0
|
136
|
+
def id
|
137
|
+
@cursor_id
|
138
|
+
end
|
139
|
+
|
140
|
+
# Get the number of documents to return. Used on 3.0 and lower server
|
141
|
+
# versions.
|
142
|
+
#
|
143
|
+
# @example Get the number to return.
|
144
|
+
# cursor.to_return
|
145
|
+
#
|
146
|
+
# @return [ Integer ] The number of documents to return.
|
147
|
+
#
|
148
|
+
# @since 2.2.0
|
149
|
+
def to_return
|
150
|
+
use_limit? ? @remaining : (batch_size || 0)
|
151
|
+
end
|
152
|
+
|
153
|
+
private
|
154
|
+
|
91
155
|
def exhausted?
|
92
156
|
limited? ? @remaining <= 0 : false
|
93
157
|
end
|
@@ -97,16 +161,11 @@ module Mongo
|
|
97
161
|
end
|
98
162
|
|
99
163
|
def get_more_operation
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
:to_return => to_return,
|
106
|
-
:cursor_id => @cursor_id,
|
107
|
-
:db_name => database.name,
|
108
|
-
:coll_name => @coll_name || collection.name
|
109
|
-
}
|
164
|
+
if @server.features.find_command_enabled?
|
165
|
+
Operation::Commands::GetMore.new(Builder::GetMoreCommand.new(self).specification)
|
166
|
+
else
|
167
|
+
Operation::Read::GetMore.new(Builder::OpGetMore.new(self).specification)
|
168
|
+
end
|
110
169
|
end
|
111
170
|
|
112
171
|
def kill_cursors
|
@@ -114,11 +173,11 @@ module Mongo
|
|
114
173
|
end
|
115
174
|
|
116
175
|
def kill_cursors_operation
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
176
|
+
if @server.features.find_command_enabled?
|
177
|
+
Operation::Commands::Command.new(Builder::KillCursorsCommand.new(self).specification)
|
178
|
+
else
|
179
|
+
Operation::KillCursors.new(Builder::OpKillCursors.new(self).specification)
|
180
|
+
end
|
122
181
|
end
|
123
182
|
|
124
183
|
def limited?
|
@@ -136,10 +195,6 @@ module Mongo
|
|
136
195
|
result.documents
|
137
196
|
end
|
138
197
|
|
139
|
-
def to_return
|
140
|
-
use_limit? ? @remaining : (batch_size || 0)
|
141
|
-
end
|
142
|
-
|
143
198
|
def use_limit?
|
144
199
|
limited? && batch_size >= @remaining
|
145
200
|
end
|