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
@@ -21,32 +21,15 @@ module Mongo
|
|
21
21
|
# @since 2.0.0
|
22
22
|
module Readable
|
23
23
|
|
24
|
-
#
|
24
|
+
# The query modifier constant.
|
25
25
|
#
|
26
|
-
# @since 2.
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
:$orderby => :sort,
|
31
|
-
:$hint => :hint,
|
32
|
-
:$comment => :comment,
|
33
|
-
:$snapshot => :snapshot,
|
34
|
-
:$maxScan => :max_scan,
|
35
|
-
:$maxTimeMS => :max_time_ms,
|
36
|
-
:$showDiskLoc => :show_disk_loc,
|
37
|
-
:$explain => :explained?
|
38
|
-
}.freeze
|
39
|
-
|
40
|
-
# Options to cursor flags mapping.
|
26
|
+
# @since 2.2.0
|
27
|
+
QUERY = '$query'.freeze
|
28
|
+
|
29
|
+
# The modifiers option constant.
|
41
30
|
#
|
42
|
-
# @since 2.
|
43
|
-
|
44
|
-
:allow_partial_results => [ :partial ],
|
45
|
-
:oplog_replay => [ :oplog_replay ],
|
46
|
-
:no_cursor_timeout => [ :no_cursor_timeout ],
|
47
|
-
:tailable => [ :tailable_cursor ],
|
48
|
-
:tailable_await => [ :await_data, :tailable_cursor]
|
49
|
-
}.freeze
|
31
|
+
# @since 2.2.0
|
32
|
+
MODIFIERS = 'modifiers'.freeze
|
50
33
|
|
51
34
|
# Execute an aggregation on the collection view.
|
52
35
|
#
|
@@ -65,45 +48,28 @@ module Mongo
|
|
65
48
|
Aggregation.new(self, pipeline, options)
|
66
49
|
end
|
67
50
|
|
68
|
-
#
|
69
|
-
# Returns a list of up to cursor_count cursors that can be iterated concurrently.
|
70
|
-
# As long as the collection is not modified during scanning, each document appears once
|
71
|
-
# in one of the cursors' result sets.
|
72
|
-
#
|
73
|
-
# @example Execute a parallel collection scan.
|
74
|
-
# view.parallel_scan(2)
|
51
|
+
# Allows the query to get partial results if some shards are down.
|
75
52
|
#
|
76
|
-
# @
|
53
|
+
# @example Allow partial results.
|
54
|
+
# view.allow_partial_results
|
77
55
|
#
|
78
|
-
# @return [
|
56
|
+
# @return [ View ] The new view.
|
79
57
|
#
|
80
|
-
# @since 2.
|
81
|
-
def
|
82
|
-
|
83
|
-
Operation::ParallelScan.new(
|
84
|
-
:coll_name => collection.name,
|
85
|
-
:db_name => database.name,
|
86
|
-
:cursor_count => cursor_count
|
87
|
-
).execute(server.context).cursor_ids.map do |cursor_id|
|
88
|
-
result = Operation::Read::GetMore.new({ :to_return => 0,
|
89
|
-
:cursor_id => cursor_id,
|
90
|
-
:db_name => database.name,
|
91
|
-
:coll_name => collection.name
|
92
|
-
}).execute(server.context)
|
93
|
-
Cursor.new(self, result, server)
|
94
|
-
end
|
58
|
+
# @since 2.0.0
|
59
|
+
def allow_partial_results
|
60
|
+
configure(:allow_partial_results, true)
|
95
61
|
end
|
96
62
|
|
97
|
-
#
|
63
|
+
# Tell the query's cursor to stay open and wait for data.
|
98
64
|
#
|
99
|
-
# @example
|
100
|
-
# view.
|
65
|
+
# @example Await data on the cursor.
|
66
|
+
# view.await_data
|
101
67
|
#
|
102
68
|
# @return [ View ] The new view.
|
103
69
|
#
|
104
70
|
# @since 2.0.0
|
105
|
-
def
|
106
|
-
|
71
|
+
def await_data
|
72
|
+
configure(:await_data, true)
|
107
73
|
end
|
108
74
|
|
109
75
|
# The number of documents returned in each batch of results from MongoDB.
|
@@ -160,12 +126,15 @@ module Mongo
|
|
160
126
|
#
|
161
127
|
# @since 2.0.0
|
162
128
|
def count(options = {})
|
163
|
-
cmd = { :count => collection.name, :query =>
|
129
|
+
cmd = { :count => collection.name, :query => filter }
|
164
130
|
cmd[:skip] = options[:skip] if options[:skip]
|
165
131
|
cmd[:hint] = options[:hint] if options[:hint]
|
166
132
|
cmd[:limit] = options[:limit] if options[:limit]
|
167
133
|
cmd[:maxTimeMS] = options[:max_time_ms] if options[:max_time_ms]
|
168
|
-
|
134
|
+
cmd[:readConcern] = collection.read_concern if collection.read_concern
|
135
|
+
read_with_retry do
|
136
|
+
database.command(cmd, options).n.to_i
|
137
|
+
end
|
169
138
|
end
|
170
139
|
|
171
140
|
# Get a list of distinct values for a specific field.
|
@@ -186,9 +155,12 @@ module Mongo
|
|
186
155
|
def distinct(field_name, options={})
|
187
156
|
cmd = { :distinct => collection.name,
|
188
157
|
:key => field_name.to_s,
|
189
|
-
:query =>
|
158
|
+
:query => filter }
|
190
159
|
cmd[:maxTimeMS] = options[:max_time_ms] if options[:max_time_ms]
|
191
|
-
|
160
|
+
cmd[:readConcern] = collection.read_concern if collection.read_concern
|
161
|
+
read_with_retry do
|
162
|
+
database.command(cmd, options).first['values']
|
163
|
+
end
|
192
164
|
end
|
193
165
|
|
194
166
|
# The index that MongoDB will be forced to use for the query.
|
@@ -249,6 +221,34 @@ module Mongo
|
|
249
221
|
configure(:max_scan, value)
|
250
222
|
end
|
251
223
|
|
224
|
+
# Set the maximum value to search.
|
225
|
+
#
|
226
|
+
# @example Set the max value.
|
227
|
+
# view.max_value(_id: 1)
|
228
|
+
#
|
229
|
+
# @param [ Hash ] value The max field and value.
|
230
|
+
#
|
231
|
+
# @return [ Hash, View ] The value or a new +View+.
|
232
|
+
#
|
233
|
+
# @since 2.1.0
|
234
|
+
def max_value(value = nil)
|
235
|
+
configure(:max_value, value)
|
236
|
+
end
|
237
|
+
|
238
|
+
# Set the minimum value to search.
|
239
|
+
#
|
240
|
+
# @example Set the min value.
|
241
|
+
# view.min_value(_id: 1)
|
242
|
+
#
|
243
|
+
# @param [ Hash ] value The min field and value.
|
244
|
+
#
|
245
|
+
# @return [ Hash, View ] The value or a new +View+.
|
246
|
+
#
|
247
|
+
# @since 2.1.0
|
248
|
+
def min_value(value = nil)
|
249
|
+
configure(:min_value, value)
|
250
|
+
end
|
251
|
+
|
252
252
|
# The server normally times out idle cursors after an inactivity period
|
253
253
|
# (10 minutes) to prevent excess memory use. Set this option to prevent that.
|
254
254
|
#
|
@@ -259,7 +259,7 @@ module Mongo
|
|
259
259
|
#
|
260
260
|
# @since 2.0.0
|
261
261
|
def no_cursor_timeout
|
262
|
-
|
262
|
+
configure(:no_cursor_timeout, true)
|
263
263
|
end
|
264
264
|
|
265
265
|
# The fields to include or exclude from each doc in the result set.
|
@@ -294,7 +294,22 @@ module Mongo
|
|
294
294
|
# @since 2.0.0
|
295
295
|
def read(value = nil)
|
296
296
|
return default_read if value.nil?
|
297
|
-
|
297
|
+
selector = value.is_a?(Hash) ? ServerSelector.get(client.options.merge(value)) : value
|
298
|
+
configure(:read, selector)
|
299
|
+
end
|
300
|
+
|
301
|
+
# Set whether to return only the indexed field or fields.
|
302
|
+
#
|
303
|
+
# @example Set the return key value.
|
304
|
+
# view.return_key(true)
|
305
|
+
#
|
306
|
+
# @param [ true, false ] value The return key value.
|
307
|
+
#
|
308
|
+
# @return [ true, false, View ] The value or a new +View+.
|
309
|
+
#
|
310
|
+
# @since 2.1.0
|
311
|
+
def return_key(value = nil)
|
312
|
+
configure(:return_key, value)
|
298
313
|
end
|
299
314
|
|
300
315
|
# Set whether the disk location should be shown for each document.
|
@@ -311,6 +326,7 @@ module Mongo
|
|
311
326
|
def show_disk_loc(value = nil)
|
312
327
|
configure(:show_disk_loc, value)
|
313
328
|
end
|
329
|
+
alias :show_record_id :show_disk_loc
|
314
330
|
|
315
331
|
# The number of docs to skip before returning results.
|
316
332
|
#
|
@@ -368,7 +384,23 @@ module Mongo
|
|
368
384
|
#
|
369
385
|
# @since 2.1.0
|
370
386
|
def modifiers(doc = nil)
|
371
|
-
|
387
|
+
return Builder::Modifiers.map_server_modifiers(options) if doc.nil?
|
388
|
+
new(options.merge(Builder::Modifiers.map_driver_options(doc)))
|
389
|
+
end
|
390
|
+
|
391
|
+
# A cumulative time limit in milliseconds for processing get more operations
|
392
|
+
# on a cursor.
|
393
|
+
#
|
394
|
+
# @example Set the max await time ms value.
|
395
|
+
# view.max_await_time_ms(500)
|
396
|
+
#
|
397
|
+
# @param [ Integer ] max The max time in milliseconds.
|
398
|
+
#
|
399
|
+
# @return [ Integer, View ] Either the max await time ms value or a new +View+.
|
400
|
+
#
|
401
|
+
# @since 2.1.0
|
402
|
+
def max_await_time_ms(max = nil)
|
403
|
+
configure(:max_await_time_ms, max)
|
372
404
|
end
|
373
405
|
|
374
406
|
# A cumulative time limit in milliseconds for processing operations on a cursor.
|
@@ -387,53 +419,35 @@ module Mongo
|
|
387
419
|
|
388
420
|
private
|
389
421
|
|
390
|
-
def default_read
|
422
|
+
def default_read
|
391
423
|
options[:read] || read_preference
|
392
424
|
end
|
393
425
|
|
394
|
-
def
|
395
|
-
|
396
|
-
|
397
|
-
|
426
|
+
def parallel_scan(cursor_count)
|
427
|
+
server = read.select_server(cluster, false)
|
428
|
+
Operation::Commands::ParallelScan.new(
|
429
|
+
:coll_name => collection.name,
|
430
|
+
:db_name => database.name,
|
431
|
+
:cursor_count => cursor_count,
|
432
|
+
:read_concern => collection.read_concern
|
433
|
+
).execute(server.context).cursor_ids.map do |cursor_id|
|
434
|
+
result = if server.features.find_command_enabled?
|
435
|
+
Operation::Commands::GetMore.new({
|
436
|
+
:selector => { :getMore => cursor_id, :collection => collection.name },
|
437
|
+
:db_name => database.name
|
438
|
+
}).execute(server.context)
|
439
|
+
else
|
440
|
+
Operation::Read::GetMore.new({
|
441
|
+
:to_return => 0,
|
442
|
+
:cursor_id => cursor_id,
|
443
|
+
:db_name => database.name,
|
444
|
+
:coll_name => collection.name
|
445
|
+
}).execute(server.context)
|
398
446
|
end
|
399
|
-
|
400
|
-
end
|
401
|
-
end
|
402
|
-
|
403
|
-
def has_special_fields?
|
404
|
-
modifiers || sort || hint || comment || max_time_ms || max_scan ||
|
405
|
-
show_disk_loc || snapshot || explained? || cluster.sharded?
|
406
|
-
end
|
407
|
-
|
408
|
-
def query_options
|
409
|
-
{ :project => projection, :skip => skip, :limit => to_return, :flags => flags }
|
410
|
-
end
|
411
|
-
|
412
|
-
def query_spec
|
413
|
-
sel = has_special_fields? ? special_selector : selector
|
414
|
-
{ :selector => sel,
|
415
|
-
:read => read,
|
416
|
-
:options => query_options,
|
417
|
-
:db_name => database.name,
|
418
|
-
:coll_name => collection.name }
|
419
|
-
end
|
420
|
-
|
421
|
-
def read_pref_formatted
|
422
|
-
read.to_mongos
|
423
|
-
end
|
424
|
-
|
425
|
-
def special_selector
|
426
|
-
SPECIAL_FIELDS.reduce({}) do |hash, (key, method)|
|
427
|
-
value = send(method) || (options[:modifiers] && options[:modifiers][key])
|
428
|
-
hash[key] = value if value
|
429
|
-
hash
|
447
|
+
Cursor.new(self, result, server)
|
430
448
|
end
|
431
449
|
end
|
432
450
|
|
433
|
-
def to_return
|
434
|
-
[ limit || batch_size, batch_size || limit ].min
|
435
|
-
end
|
436
|
-
|
437
451
|
def validate_doc!(doc)
|
438
452
|
raise Error::InvalidDocument.new unless doc.respond_to?(:keys)
|
439
453
|
end
|
@@ -31,11 +31,16 @@ module Mongo
|
|
31
31
|
#
|
32
32
|
# @since 2.0.0
|
33
33
|
def find_one_and_delete
|
34
|
-
cmd = { :findandmodify => collection.name, :query =>
|
34
|
+
cmd = { :findandmodify => collection.name, :query => filter, :remove => true }
|
35
35
|
cmd[:fields] = projection if projection
|
36
36
|
cmd[:sort] = sort if sort
|
37
37
|
cmd[:maxTimeMS] = max_time_ms if max_time_ms
|
38
|
-
|
38
|
+
wc = options[:write_concern] || (collection.write_concern &&
|
39
|
+
collection.write_concern.options)
|
40
|
+
cmd[:writeConcern] = wc if wc
|
41
|
+
write_with_retry do
|
42
|
+
database.command(cmd).first['value']
|
43
|
+
end
|
39
44
|
end
|
40
45
|
|
41
46
|
# Finds a single document and replaces it.
|
@@ -50,8 +55,11 @@ module Mongo
|
|
50
55
|
# @param [ Hash ] opts The options.
|
51
56
|
#
|
52
57
|
# @option opts [ Symbol ] :return_document Either :before or :after.
|
53
|
-
# @option opts [ true, false ] :upsert Whether to upsert if the
|
54
|
-
#
|
58
|
+
# @option opts [ true, false ] :upsert Whether to upsert if the document doesn't exist.
|
59
|
+
# @option opts [ true, false ] :bypass_document_validation Whether or
|
60
|
+
# not to skip document level validation.
|
61
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
62
|
+
# Defaults to the collection's write concern.
|
55
63
|
#
|
56
64
|
# @return [ BSON::Document ] The document.
|
57
65
|
#
|
@@ -69,20 +77,31 @@ module Mongo
|
|
69
77
|
# @param [ Hash ] opts The options.
|
70
78
|
#
|
71
79
|
# @option opts [ Symbol ] :return_document Either :before or :after.
|
80
|
+
# @option opts [ true, false ] :upsert Whether to upsert if the document doesn't exist.
|
81
|
+
# @option opts [ true, false ] :bypass_document_validation Whether or
|
82
|
+
# not to skip document level validation.
|
83
|
+
# @option options [ Hash ] :write_concern The write concern options.
|
84
|
+
# Defaults to the collection's write concern.
|
72
85
|
#
|
73
86
|
# @return [ BSON::Document ] The document.
|
74
87
|
#
|
75
88
|
# @since 2.0.0
|
76
89
|
def find_one_and_update(document, opts = {})
|
77
|
-
cmd = { :findandmodify => collection.name, :query =>
|
90
|
+
cmd = { :findandmodify => collection.name, :query => filter }
|
78
91
|
cmd[:update] = document
|
79
92
|
cmd[:fields] = projection if projection
|
80
93
|
cmd[:sort] = sort if sort
|
81
94
|
cmd[:new] = !!(opts[:return_document] && opts[:return_document] == :after)
|
82
95
|
cmd[:upsert] = opts[:upsert] if opts[:upsert]
|
83
96
|
cmd[:maxTimeMS] = max_time_ms if max_time_ms
|
84
|
-
|
85
|
-
|
97
|
+
cmd[:bypassDocumentValidation] = !!opts[:bypass_document_validation]
|
98
|
+
wc = options[:write_concern] || (collection.write_concern &&
|
99
|
+
collection.write_concern.options)
|
100
|
+
cmd[:writeConcern] = wc if wc
|
101
|
+
write_with_retry do
|
102
|
+
value = database.command(cmd).first['value']
|
103
|
+
value unless value.nil? || value.empty?
|
104
|
+
end
|
86
105
|
end
|
87
106
|
|
88
107
|
# Remove documents from the collection.
|
@@ -166,24 +185,29 @@ module Mongo
|
|
166
185
|
private
|
167
186
|
|
168
187
|
def remove(value)
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
188
|
+
write_with_retry do
|
189
|
+
Operation::Write::Delete.new(
|
190
|
+
:delete => { Operation::Q => filter, Operation::LIMIT => value },
|
191
|
+
:db_name => collection.database.name,
|
192
|
+
:coll_name => collection.name,
|
193
|
+
:write_concern => collection.write_concern
|
194
|
+
).execute(next_primary.context)
|
195
|
+
end
|
175
196
|
end
|
176
197
|
|
177
198
|
def update(spec, multi, opts)
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
199
|
+
write_with_retry do
|
200
|
+
Operation::Write::Update.new(
|
201
|
+
:update => { Operation::Q => filter,
|
202
|
+
Operation::U => spec,
|
203
|
+
Operation::MULTI => multi,
|
204
|
+
Operation::UPSERT => !!opts[:upsert] },
|
205
|
+
:db_name => collection.database.name,
|
206
|
+
:coll_name => collection.name,
|
207
|
+
:write_concern => collection.write_concern,
|
208
|
+
:bypass_document_validation => !!opts[:bypass_document_validation]
|
209
|
+
).execute(next_primary.context)
|
210
|
+
end
|
187
211
|
end
|
188
212
|
end
|
189
213
|
end
|
@@ -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/collection/view/builder'
|
15
16
|
require 'mongo/collection/view/immutable'
|
16
17
|
require 'mongo/collection/view/iterable'
|
17
18
|
require 'mongo/collection/view/explainable'
|
@@ -44,13 +45,15 @@ module Mongo
|
|
44
45
|
include Immutable
|
45
46
|
include Iterable
|
46
47
|
include Readable
|
48
|
+
include Retryable
|
47
49
|
include Explainable
|
48
50
|
include Writable
|
49
51
|
|
50
|
-
# @return [
|
52
|
+
# @return [ Collection ] The +Collection+ to query.
|
51
53
|
attr_reader :collection
|
52
|
-
|
53
|
-
|
54
|
+
|
55
|
+
# @return [ Hash ] The query filter.
|
56
|
+
attr_reader :filter
|
54
57
|
|
55
58
|
# Delegate necessary operations to the collection.
|
56
59
|
def_delegators :collection, :client, :cluster, :database, :read_preference, :write_concern
|
@@ -58,25 +61,27 @@ module Mongo
|
|
58
61
|
# Delegate to the cluster for the next primary.
|
59
62
|
def_delegators :cluster, :next_primary
|
60
63
|
|
64
|
+
alias :selector :filter
|
65
|
+
|
61
66
|
# Compare two +View+ objects.
|
62
67
|
#
|
63
68
|
# @example Compare the view with another object.
|
64
69
|
# view == other
|
65
70
|
#
|
66
|
-
# @return [ true, false ] Equal if collection,
|
71
|
+
# @return [ true, false ] Equal if collection, filter, and options of two
|
67
72
|
# +View+ match.
|
68
73
|
#
|
69
74
|
# @since 2.0.0
|
70
75
|
def ==(other)
|
71
76
|
return false unless other.is_a?(View)
|
72
77
|
collection == other.collection &&
|
73
|
-
|
78
|
+
filter == other.filter &&
|
74
79
|
options == other.options
|
75
80
|
end
|
76
81
|
alias_method :eql?, :==
|
77
82
|
|
78
83
|
# A hash value for the +View+ composed of the collection namespace,
|
79
|
-
# hash of the options and hash of the
|
84
|
+
# hash of the options and hash of the filter.
|
80
85
|
#
|
81
86
|
# @example Get the hash value.
|
82
87
|
# view.hash
|
@@ -85,7 +90,7 @@ module Mongo
|
|
85
90
|
#
|
86
91
|
# @since 2.0.0
|
87
92
|
def hash
|
88
|
-
[ collection.namespace, options.hash,
|
93
|
+
[ collection.namespace, options.hash, filter.hash ].hash
|
89
94
|
end
|
90
95
|
|
91
96
|
# Creates a new +View+.
|
@@ -100,7 +105,7 @@ module Mongo
|
|
100
105
|
# View.new(collection, {:name => 'Emily'}, :read => :secondary_preferred)
|
101
106
|
#
|
102
107
|
# @param [ Collection ] collection The +Collection+ to query.
|
103
|
-
# @param [ Hash ]
|
108
|
+
# @param [ Hash ] filter The query filter.
|
104
109
|
# @param [ Hash ] options The additional query options.
|
105
110
|
#
|
106
111
|
# @option options :comment [ String ] Associate a comment with the query.
|
@@ -124,11 +129,10 @@ module Mongo
|
|
124
129
|
# results.
|
125
130
|
#
|
126
131
|
# @since 2.0.0
|
127
|
-
def initialize(collection,
|
128
|
-
validate_doc!(
|
132
|
+
def initialize(collection, filter = {}, options = {})
|
133
|
+
validate_doc!(filter)
|
129
134
|
@collection = collection
|
130
|
-
|
131
|
-
@options = options.dup
|
135
|
+
parse_parameters!(BSON::Document.new(filter.freeze), BSON::Document.new(options.freeze))
|
132
136
|
end
|
133
137
|
|
134
138
|
# Get a human-readable string representation of +View+.
|
@@ -140,8 +144,8 @@ module Mongo
|
|
140
144
|
#
|
141
145
|
# @since 2.0.0
|
142
146
|
def inspect
|
143
|
-
"#<Mongo::Collection::View:0x#{object_id} namespace='#{collection.namespace}" +
|
144
|
-
" @
|
147
|
+
"#<Mongo::Collection::View:0x#{object_id} namespace='#{collection.namespace}'" +
|
148
|
+
" @filter=#{filter.to_s} @options=#{options.to_s}>"
|
145
149
|
end
|
146
150
|
|
147
151
|
private
|
@@ -149,19 +153,18 @@ module Mongo
|
|
149
153
|
def initialize_copy(other)
|
150
154
|
@collection = other.collection
|
151
155
|
@options = other.options.dup
|
152
|
-
@
|
156
|
+
@filter = other.filter.dup
|
153
157
|
end
|
154
158
|
|
155
|
-
def
|
156
|
-
|
159
|
+
def parse_parameters!(filter, options)
|
160
|
+
query = filter.delete(QUERY)
|
161
|
+
modifiers = (filter || {}).merge(options.delete(MODIFIERS) || {})
|
162
|
+
@filter = query || filter
|
163
|
+
@options = Builder::Modifiers.map_driver_options(modifiers).merge!(options)
|
157
164
|
end
|
158
165
|
|
159
166
|
def new(options)
|
160
|
-
View.new(collection,
|
161
|
-
end
|
162
|
-
|
163
|
-
def send_initial_query(server)
|
164
|
-
initial_query_op.execute(server.context)
|
167
|
+
View.new(collection, filter, options)
|
165
168
|
end
|
166
169
|
|
167
170
|
def view; self; end
|