mongo 2.4.3 → 2.5.0.beta
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 +3 -2
- data.tar.gz.sig +0 -0
- data/lib/mongo.rb +3 -2
- data/lib/mongo/auth/cr.rb +6 -4
- data/lib/mongo/auth/cr/conversation.rb +33 -17
- data/lib/mongo/auth/ldap.rb +4 -2
- data/lib/mongo/auth/ldap/conversation.rb +19 -9
- data/lib/mongo/auth/scram.rb +7 -4
- data/lib/mongo/auth/scram/conversation.rb +62 -24
- data/lib/mongo/auth/user.rb +10 -0
- data/lib/mongo/auth/user/view.rb +44 -22
- data/lib/mongo/auth/x509.rb +4 -2
- data/lib/mongo/auth/x509/conversation.rb +19 -9
- data/lib/mongo/bulk_write.rb +33 -27
- data/lib/mongo/bulk_write/combineable.rb +5 -0
- data/lib/mongo/bulk_write/transformable.rb +2 -0
- data/lib/mongo/bulk_write/validatable.rb +4 -0
- data/lib/mongo/client.rb +123 -12
- data/lib/mongo/cluster.rb +52 -11
- data/lib/mongo/cluster/app_metadata.rb +8 -2
- data/lib/mongo/cluster/cursor_reaper.rb +0 -1
- data/lib/mongo/cluster/topology.rb +1 -1
- data/lib/mongo/collection.rb +114 -27
- data/lib/mongo/collection/view.rb +8 -2
- data/lib/mongo/collection/view/aggregation.rb +11 -7
- data/lib/mongo/collection/view/builder/aggregation.rb +5 -1
- data/lib/mongo/collection/view/builder/find_command.rb +5 -3
- data/lib/mongo/collection/view/builder/map_reduce.rb +11 -3
- data/lib/mongo/collection/view/builder/op_query.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +160 -0
- data/lib/mongo/collection/view/change_stream/retryable.rb +57 -0
- data/lib/mongo/collection/view/iterable.rb +11 -10
- data/lib/mongo/collection/view/map_reduce.rb +22 -18
- data/lib/mongo/collection/view/readable.rb +51 -37
- data/lib/mongo/collection/view/writable.rb +72 -40
- data/lib/mongo/cursor.rb +25 -4
- data/lib/mongo/cursor/builder/get_more_command.rb +4 -2
- data/lib/mongo/database.rb +22 -11
- data/lib/mongo/database/view.rb +16 -12
- data/lib/mongo/error.rb +5 -0
- data/lib/mongo/error/invalid_session.rb +36 -0
- data/lib/mongo/error/missing_resume_token.rb +39 -0
- data/lib/mongo/error/operation_failure.rb +17 -0
- data/lib/mongo/error/parser.rb +3 -2
- data/lib/mongo/error/unknown_payload_type.rb +41 -0
- data/lib/mongo/error/unsupported_array_filters.rb +51 -0
- data/lib/mongo/error/unsupported_message_type.rb +23 -0
- data/lib/mongo/grid/fs_bucket.rb +5 -4
- data/lib/mongo/grid/stream/read.rb +3 -2
- data/lib/mongo/grid/stream/write.rb +2 -2
- data/lib/mongo/index/view.rb +35 -25
- data/lib/mongo/monitoring/event/secure.rb +14 -0
- data/lib/mongo/operation.rb +16 -0
- data/lib/mongo/operation/commands.rb +1 -0
- data/lib/mongo/operation/commands/aggregate.rb +9 -5
- data/lib/mongo/operation/commands/aggregate/result.rb +1 -1
- data/lib/mongo/operation/commands/collections_info.rb +6 -6
- data/lib/mongo/operation/commands/command.rb +2 -1
- data/lib/mongo/operation/commands/create.rb +6 -2
- data/lib/mongo/operation/commands/drop.rb +6 -2
- data/lib/mongo/operation/commands/drop_database.rb +6 -2
- data/lib/mongo/operation/commands/explain.rb +27 -0
- data/lib/mongo/operation/commands/explain/result.rb +52 -0
- data/lib/mongo/operation/commands/indexes.rb +1 -1
- data/lib/mongo/operation/commands/list_collections.rb +1 -1
- data/lib/mongo/operation/commands/list_collections/result.rb +1 -1
- data/lib/mongo/operation/commands/list_indexes.rb +1 -1
- data/lib/mongo/operation/commands/list_indexes/result.rb +1 -1
- data/lib/mongo/operation/commands/map_reduce.rb +8 -4
- data/lib/mongo/operation/commands/map_reduce/result.rb +13 -1
- data/lib/mongo/operation/commands/user_query.rb +1 -1
- data/lib/mongo/operation/commands/users_info.rb +6 -2
- data/lib/mongo/operation/executable.rb +4 -1
- data/lib/mongo/operation/read_preference.rb +10 -5
- data/lib/mongo/operation/result.rb +26 -2
- data/lib/mongo/operation/specifiable.rb +13 -1
- data/lib/mongo/operation/uses_command_op_msg.rb +47 -0
- data/lib/mongo/operation/write/bulk/bulkable.rb +4 -1
- data/lib/mongo/operation/write/bulk/insert/result.rb +4 -4
- data/lib/mongo/operation/write/command/create_index.rb +6 -1
- data/lib/mongo/operation/write/command/delete.rb +28 -4
- data/lib/mongo/operation/write/command/drop_index.rb +6 -1
- data/lib/mongo/operation/write/command/insert.rb +22 -18
- data/lib/mongo/operation/write/command/update.rb +24 -9
- data/lib/mongo/operation/write/command/writable.rb +14 -1
- data/lib/mongo/operation/write/insert.rb +4 -1
- data/lib/mongo/operation/write/insert/result.rb +2 -2
- data/lib/mongo/operation/write/update.rb +7 -1
- data/lib/mongo/operation/write/write_command_enabled.rb +20 -3
- data/lib/mongo/protocol.rb +3 -0
- data/lib/mongo/protocol/bit_vector.rb +2 -2
- data/lib/mongo/protocol/compressed.rb +135 -0
- data/lib/mongo/protocol/delete.rb +8 -6
- data/lib/mongo/protocol/get_more.rb +8 -6
- data/lib/mongo/protocol/insert.rb +8 -6
- data/lib/mongo/protocol/kill_cursors.rb +8 -6
- data/lib/mongo/protocol/message.rb +31 -3
- data/lib/mongo/protocol/msg.rb +172 -0
- data/lib/mongo/protocol/query.rb +26 -6
- data/lib/mongo/protocol/registry.rb +76 -0
- data/lib/mongo/protocol/reply.rb +10 -5
- data/lib/mongo/protocol/serializers.rb +224 -0
- data/lib/mongo/protocol/update.rb +8 -6
- data/lib/mongo/retryable.rb +4 -2
- data/lib/mongo/server.rb +6 -3
- data/lib/mongo/server/connectable.rb +1 -1
- data/lib/mongo/server/connection.rb +30 -8
- data/lib/mongo/server/description.rb +25 -1
- data/lib/mongo/server/description/features.rb +4 -1
- data/lib/mongo/server/monitor.rb +5 -0
- data/lib/mongo/server/monitor/connection.rb +50 -2
- data/lib/mongo/server_selector/nearest.rb +10 -4
- data/lib/mongo/server_selector/primary.rb +20 -0
- data/lib/mongo/server_selector/primary_preferred.rb +10 -4
- data/lib/mongo/server_selector/secondary.rb +10 -4
- data/lib/mongo/server_selector/secondary_preferred.rb +24 -4
- data/lib/mongo/session.rb +180 -0
- data/lib/mongo/session/server_session.rb +73 -0
- data/lib/mongo/session/session_pool.rb +161 -0
- data/lib/mongo/uri.rb +11 -0
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +2 -1
- data/spec/mongo/auth/cr_spec.rb +12 -0
- data/spec/mongo/auth/ldap_spec.rb +2 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +6 -6
- data/spec/mongo/auth/scram_spec.rb +25 -1
- data/spec/mongo/auth/user/view_spec.rb +268 -76
- data/spec/mongo/auth/x509_spec.rb +2 -0
- data/spec/mongo/bulk_write_spec.rb +435 -5
- data/spec/mongo/client_spec.rb +356 -39
- data/spec/mongo/cluster/app_metadata_spec.rb +2 -2
- data/spec/mongo/cluster_spec.rb +176 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +33 -12
- data/spec/mongo/collection/view/builder/find_command_spec.rb +46 -6
- data/spec/mongo/collection/view/change_stream_spec.rb +814 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +94 -17
- data/spec/mongo/collection/view/readable_spec.rb +3 -12
- data/spec/mongo/collection_spec.rb +1048 -42
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +19 -0
- data/spec/mongo/cursor_spec.rb +2 -2
- data/spec/mongo/database_spec.rb +50 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +225 -137
- data/spec/mongo/grid/stream/read_spec.rb +2 -2
- data/spec/mongo/index/view_spec.rb +146 -8
- data/spec/mongo/monitoring/event/secure_spec.rb +42 -0
- data/spec/mongo/operation/read/query_spec.rb +2 -1
- data/spec/mongo/operation/specifiable_spec.rb +2 -2
- data/spec/mongo/operation/write/command/delete_spec.rb +96 -13
- data/spec/mongo/operation/write/command/insert_spec.rb +111 -12
- data/spec/mongo/operation/write/command/update_spec.rb +93 -10
- data/spec/mongo/operation/write/delete_spec.rb +1 -1
- data/spec/mongo/operation/write/insert_spec.rb +1 -1
- data/spec/mongo/operation/write/update_spec.rb +1 -1
- data/spec/mongo/protocol/compressed_spec.rb +66 -0
- data/spec/mongo/protocol/delete_spec.rb +14 -0
- data/spec/mongo/protocol/get_more_spec.rb +14 -0
- data/spec/mongo/protocol/insert_spec.rb +14 -0
- data/spec/mongo/protocol/kill_cursors_spec.rb +14 -0
- data/spec/mongo/protocol/msg_spec.rb +499 -0
- data/spec/mongo/protocol/query_spec.rb +45 -0
- data/spec/mongo/protocol/registry_spec.rb +31 -0
- data/spec/mongo/protocol/reply_spec.rb +14 -0
- data/spec/mongo/protocol/update_spec.rb +14 -0
- data/spec/mongo/retryable_spec.rb +6 -2
- data/spec/mongo/sdam_spec.rb +4 -0
- data/spec/mongo/server/connection_spec.rb +4 -2
- data/spec/mongo/server/description_spec.rb +28 -1
- data/spec/mongo/session/server_session_spec.rb +16 -0
- data/spec/mongo/session/session_pool_spec.rb +194 -0
- data/spec/mongo/uri_spec.rb +31 -2
- data/spec/spec_helper.rb +104 -0
- data/spec/support/authorization.rb +6 -1
- data/spec/support/crud.rb +3 -1
- data/spec/support/crud/write.rb +6 -1
- data/spec/support/crud_tests/write/findOneAndUpdate-arrayFilters.yml +69 -0
- data/spec/support/crud_tests/write/updateMany-arrayFilters.yml +63 -0
- data/spec/support/crud_tests/write/updateOne-arrayFilters.yml +109 -0
- data/spec/support/sdam/rs/discover_arbiters.yml +1 -1
- data/spec/support/sdam/rs/discover_passives.yml +2 -2
- data/spec/support/sdam/rs/discover_primary.yml +1 -1
- data/spec/support/sdam/rs/discover_secondary.yml +1 -1
- data/spec/support/sdam/rs/discovery.yml +4 -4
- data/spec/support/sdam/rs/equal_electionids.yml +1 -0
- data/spec/support/sdam/rs/ghost_discovered.yml +1 -1
- data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +1 -1
- data/spec/support/sdam/rs/ls_timeout.yml +88 -0
- data/spec/support/sdam/rs/member_reconfig.yml +2 -2
- data/spec/support/sdam/rs/member_standalone.yml +2 -2
- data/spec/support/sdam/rs/new_primary.yml +2 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +3 -0
- data/spec/support/sdam/rs/new_primary_new_setversion.yml +3 -0
- data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +2 -2
- data/spec/support/sdam/rs/non_rs_member.yml +1 -1
- data/spec/support/sdam/rs/normalize_case.yml +1 -1
- data/spec/support/sdam/rs/null_election_id.yml +4 -0
- data/spec/support/sdam/rs/primary_becomes_standalone.yml +2 -2
- data/spec/support/sdam/rs/primary_changes_set_name.yml +2 -2
- data/spec/support/sdam/rs/primary_disconnect.yml +2 -2
- data/spec/support/sdam/rs/primary_disconnect_electionid.yml +5 -0
- data/spec/support/sdam/rs/primary_disconnect_setversion.yml +5 -0
- data/spec/support/sdam/rs/primary_hint_from_secondary_with_mismatched_me.yml +58 -0
- data/spec/support/sdam/rs/primary_reports_new_member.yml +4 -4
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +2 -2
- data/spec/support/sdam/rs/primary_wrong_set_name.yml +1 -1
- data/spec/support/sdam/rs/response_from_removed.yml +2 -2
- data/spec/support/sdam/rs/rsother_discovered.yml +1 -1
- data/spec/support/sdam/rs/sec_not_auth.yml +1 -1
- data/spec/support/sdam/rs/secondary_wrong_set_name.yml +1 -1
- data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +2 -2
- data/spec/support/sdam/rs/setversion_without_electionid.yml +2 -0
- data/spec/support/sdam/rs/stepdown_change_set_name.yml +2 -2
- data/spec/support/sdam/rs/unexpected_mongos.yml +1 -1
- data/spec/support/sdam/rs/use_setversion_without_electionid.yml +3 -0
- data/spec/support/sdam/rs/wrong_set_name.yml +1 -1
- data/spec/support/sdam/sharded/ls_timeout_mongos.yml +97 -0
- data/spec/support/sdam/sharded/mongos_disconnect.yml +3 -3
- data/spec/support/sdam/sharded/multiple_mongoses.yml +1 -1
- data/spec/support/sdam/sharded/non_mongos_removed.yml +1 -1
- data/spec/support/sdam/sharded/normalize_uri_case.yml +1 -1
- data/spec/support/sdam/single/direct_connection_external_ip.yml +1 -1
- data/spec/support/sdam/single/direct_connection_mongos.yml +1 -1
- 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/ls_timeout_standalone.yml +35 -0
- data/spec/support/sdam/single/not_ok_response.yml +1 -1
- data/spec/support/sdam/single/standalone_removed.yml +1 -1
- data/spec/support/sdam/single/unavailable_seed.yml +1 -1
- data/spec/support/server_discovery_and_monitoring.rb +4 -0
- data/spec/support/shared/session.rb +236 -0
- metadata +53 -15
- metadata.gz.sig +0 -0
@@ -133,7 +133,7 @@ module Mongo
|
|
133
133
|
#
|
134
134
|
# @since 2.1.0
|
135
135
|
def read_preference
|
136
|
-
@read_preference ||=
|
136
|
+
@read_preference ||= options[:read] || fs.read_preference
|
137
137
|
end
|
138
138
|
|
139
139
|
# Get the files collection file information document for the file being read.
|
@@ -167,7 +167,8 @@ module Mongo
|
|
167
167
|
end
|
168
168
|
|
169
169
|
def view
|
170
|
-
@view ||=
|
170
|
+
@view ||= (opts = options.merge(read: read_preference) if read_preference
|
171
|
+
fs.chunks_collection.find({ :files_id => file_id }, opts || options).sort(:n => 1))
|
171
172
|
end
|
172
173
|
|
173
174
|
def validate!(index, num_chunks, chunk, length_read)
|
@@ -103,7 +103,7 @@ module Mongo
|
|
103
103
|
def close
|
104
104
|
ensure_open!
|
105
105
|
update_length
|
106
|
-
files_collection.insert_one(file_info)
|
106
|
+
files_collection.insert_one(file_info, @options)
|
107
107
|
@open = false
|
108
108
|
file_id
|
109
109
|
end
|
@@ -142,7 +142,7 @@ module Mongo
|
|
142
142
|
#
|
143
143
|
# @since 2.1.0
|
144
144
|
def abort
|
145
|
-
fs.chunks_collection.find(:files_id => file_id).delete_many
|
145
|
+
fs.chunks_collection.find({ :files_id => file_id }, @options).delete_many
|
146
146
|
@open = false || true
|
147
147
|
end
|
148
148
|
|
data/lib/mongo/index/view.rb
CHANGED
@@ -29,7 +29,7 @@ module Mongo
|
|
29
29
|
# when sending the listIndexes command.
|
30
30
|
attr_reader :batch_size
|
31
31
|
|
32
|
-
def_delegators :@collection, :cluster, :database, :read_preference, :write_concern
|
32
|
+
def_delegators :@collection, :cluster, :database, :read_preference, :write_concern, :client
|
33
33
|
def_delegators :cluster, :next_primary
|
34
34
|
|
35
35
|
# The index key field.
|
@@ -149,14 +149,16 @@ module Mongo
|
|
149
149
|
# @since 2.0.0
|
150
150
|
def create_many(*models)
|
151
151
|
server = next_primary
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
152
|
+
client.send(:with_session, @options) do |session|
|
153
|
+
spec = {
|
154
|
+
indexes: normalize_models(models.flatten, server),
|
155
|
+
db_name: database.name,
|
156
|
+
coll_name: collection.name,
|
157
|
+
session: session
|
158
|
+
}
|
159
|
+
spec[:write_concern] = write_concern if server.features.collation_enabled?
|
160
|
+
Operation::Write::CreateIndex.new(spec).execute(server)
|
161
|
+
end
|
160
162
|
end
|
161
163
|
|
162
164
|
# Convenience method for getting index information by a specific name or
|
@@ -189,11 +191,13 @@ module Mongo
|
|
189
191
|
# @since 2.0.0
|
190
192
|
def each(&block)
|
191
193
|
server = next_primary(false)
|
192
|
-
|
194
|
+
session = client.send(:get_session, @options)
|
195
|
+
result = send_initial_query(server, session)
|
196
|
+
cursor = Cursor.new(self, result, server, session: session)
|
193
197
|
cursor.each do |doc|
|
194
198
|
yield doc
|
195
199
|
end if block_given?
|
196
|
-
cursor
|
200
|
+
cursor.to_enum
|
197
201
|
end
|
198
202
|
|
199
203
|
# Create the new index view.
|
@@ -213,35 +217,41 @@ module Mongo
|
|
213
217
|
def initialize(collection, options = {})
|
214
218
|
@collection = collection
|
215
219
|
@batch_size = options[:batch_size]
|
220
|
+
@options = options
|
216
221
|
end
|
217
222
|
|
218
223
|
private
|
219
224
|
|
220
225
|
def drop_by_name(name)
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
226
|
+
client.send(:with_session, @options) do |session|
|
227
|
+
spec = {
|
228
|
+
db_name: database.name,
|
229
|
+
coll_name: collection.name,
|
230
|
+
index_name: name,
|
231
|
+
session: session
|
232
|
+
}
|
233
|
+
server = next_primary
|
234
|
+
spec[:write_concern] = write_concern if server.features.collation_enabled?
|
235
|
+
Operation::Write::DropIndex.new(spec).execute(server)
|
236
|
+
end
|
229
237
|
end
|
230
238
|
|
231
239
|
def index_name(spec)
|
232
240
|
spec.to_a.join('_')
|
233
241
|
end
|
234
242
|
|
235
|
-
def indexes_spec
|
243
|
+
def indexes_spec(session)
|
236
244
|
{ selector: {
|
237
245
|
listIndexes: collection.name,
|
238
246
|
cursor: batch_size ? { batchSize: batch_size } : {} },
|
239
247
|
coll_name: collection.name,
|
240
|
-
db_name: database.name
|
248
|
+
db_name: database.name,
|
249
|
+
session: session
|
250
|
+
}
|
241
251
|
end
|
242
252
|
|
243
|
-
def initial_query_op
|
244
|
-
Operation::Commands::Indexes.new(indexes_spec)
|
253
|
+
def initial_query_op(session)
|
254
|
+
Operation::Commands::Indexes.new(indexes_spec(session))
|
245
255
|
end
|
246
256
|
|
247
257
|
def limit; -1; end
|
@@ -257,8 +267,8 @@ module Mongo
|
|
257
267
|
end
|
258
268
|
end
|
259
269
|
|
260
|
-
def send_initial_query(server)
|
261
|
-
initial_query_op.execute(server)
|
270
|
+
def send_initial_query(server, session)
|
271
|
+
initial_query_op(session).execute(server)
|
262
272
|
end
|
263
273
|
|
264
274
|
def with_generated_names(models, server)
|
@@ -52,6 +52,20 @@ module Mongo
|
|
52
52
|
def redacted(command_name, document)
|
53
53
|
REDACTED_COMMANDS.include?(command_name.to_s) ? BSON::Document.new : document
|
54
54
|
end
|
55
|
+
|
56
|
+
# Is compression allowed for a given command message.
|
57
|
+
#
|
58
|
+
# @example Determine if compression is allowed for a given command.
|
59
|
+
# secure.compression_allowed?(selector)
|
60
|
+
#
|
61
|
+
# @param [ String, Symbol ] command_name The command name.
|
62
|
+
#
|
63
|
+
# @return [ true, false ] Whether compression can be used.
|
64
|
+
#
|
65
|
+
# @since 2.5.0
|
66
|
+
def compression_allowed?(command_name)
|
67
|
+
@compression_allowed ||= !REDACTED_COMMANDS.include?(command_name.to_s)
|
68
|
+
end
|
55
69
|
end
|
56
70
|
end
|
57
71
|
end
|
data/lib/mongo/operation.rb
CHANGED
@@ -17,6 +17,7 @@ require 'mongo/operation/executable'
|
|
17
17
|
require 'mongo/operation/specifiable'
|
18
18
|
require 'mongo/operation/limited'
|
19
19
|
require 'mongo/operation/object_id_generator'
|
20
|
+
require 'mongo/operation/uses_command_op_msg'
|
20
21
|
require 'mongo/operation/read_preference'
|
21
22
|
require 'mongo/operation/takes_write_concern'
|
22
23
|
require 'mongo/operation/read'
|
@@ -56,5 +57,20 @@ module Mongo
|
|
56
57
|
#
|
57
58
|
# @since 2.4.0
|
58
59
|
COLLATION = 'collation'.freeze
|
60
|
+
|
61
|
+
# The array filters field constant.
|
62
|
+
#
|
63
|
+
# @since 2.5.0
|
64
|
+
ARRAY_FILTERS = 'arrayFilters'.freeze
|
65
|
+
|
66
|
+
# The operation time field constant.
|
67
|
+
#
|
68
|
+
# @since 2.5.0
|
69
|
+
OPERATION_TIME = 'operationTime'.freeze
|
70
|
+
|
71
|
+
# The cluster time field constant.
|
72
|
+
#
|
73
|
+
# @since 2.5.0
|
74
|
+
CLUSTER_TIME = '$clusterTime'.freeze
|
59
75
|
end
|
60
76
|
end
|
@@ -14,6 +14,7 @@
|
|
14
14
|
|
15
15
|
require 'mongo/operation/commands/command'
|
16
16
|
require 'mongo/operation/commands/find'
|
17
|
+
require 'mongo/operation/commands/explain'
|
17
18
|
require 'mongo/operation/commands/get_more'
|
18
19
|
require 'mongo/operation/commands/parallel_scan'
|
19
20
|
require 'mongo/operation/commands/aggregate'
|
@@ -18,7 +18,7 @@ module Mongo
|
|
18
18
|
|
19
19
|
# A MongoDB aggregate operation.
|
20
20
|
#
|
21
|
-
# @note An aggregate operation can behave like a read and return a
|
21
|
+
# @note An aggregate operation can behave like a read and return a
|
22
22
|
# result set, or can behave like a write operation and
|
23
23
|
# output results to a user-specified collection.
|
24
24
|
#
|
@@ -50,11 +50,15 @@ module Mongo
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def message(server)
|
53
|
-
sel =
|
54
|
-
sel = filter_cursor_from_selector(sel, server)
|
53
|
+
sel = filter_cursor_from_selector(selector, server)
|
55
54
|
sel = update_selector_for_write_concern(sel, server)
|
56
|
-
|
57
|
-
|
55
|
+
if server.features.op_msg_enabled?
|
56
|
+
command_op_msg(server, sel, options)
|
57
|
+
else
|
58
|
+
sel = update_selector_for_read_pref(sel, server)
|
59
|
+
opts = update_options_for_slave_ok(options, server)
|
60
|
+
Protocol::Query.new(db_name, query_coll, sel, opts)
|
61
|
+
end
|
58
62
|
end
|
59
63
|
end
|
60
64
|
end
|
@@ -18,16 +18,16 @@ module Mongo
|
|
18
18
|
module Operation
|
19
19
|
module Commands
|
20
20
|
|
21
|
-
# A MongoDB operation to get a list of
|
21
|
+
# A MongoDB operation to get a list of collections info in a database.
|
22
22
|
#
|
23
|
-
# @example Create the
|
24
|
-
#
|
23
|
+
# @example Create the collections info operation.
|
24
|
+
# CollectionsInfo.new(:db_name => 'test-db')
|
25
25
|
#
|
26
26
|
# Initialization:
|
27
|
-
# param [ Hash ] spec The specifications for the
|
27
|
+
# param [ Hash ] spec The specifications for the collections info operation.
|
28
28
|
#
|
29
|
-
# option spec :db_name [ String ] The name of the database whose
|
30
|
-
#
|
29
|
+
# option spec :db_name [ String ] The name of the database whose collections
|
30
|
+
# info is requested.
|
31
31
|
# option spec :options [ Hash ] Options for the operation.
|
32
32
|
#
|
33
33
|
# @since 2.0.0
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# A MongoDB command operation.
|
20
20
|
#
|
21
21
|
# @example Create the command operation.
|
22
|
-
#
|
22
|
+
# Command.new({ :selector => { :isMaster => 1 } })
|
23
23
|
#
|
24
24
|
# Initialization:
|
25
25
|
# param [ Hash ] spec The specifications for the command.
|
@@ -35,6 +35,7 @@ module Mongo
|
|
35
35
|
include Limited
|
36
36
|
include ReadPreference
|
37
37
|
include Executable
|
38
|
+
include UsesCommandOpMsg
|
38
39
|
|
39
40
|
private
|
40
41
|
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# A MongoDB create collection operation.
|
20
20
|
#
|
21
21
|
# @example Instantiate the operation.
|
22
|
-
#
|
22
|
+
# Create.new(selector: { create: 'test' }, :db_name => 'test')
|
23
23
|
#
|
24
24
|
# Initialization:
|
25
25
|
# param [ Hash ] spec The specifications for the operation.
|
@@ -37,7 +37,11 @@ module Mongo
|
|
37
37
|
|
38
38
|
def message(server)
|
39
39
|
sel = update_selector_for_write_concern(selector, server)
|
40
|
-
|
40
|
+
if server.features.op_msg_enabled?
|
41
|
+
command_op_msg(server, sel, options)
|
42
|
+
else
|
43
|
+
Protocol::Query.new(db_name, query_coll, sel, options)
|
44
|
+
end
|
41
45
|
end
|
42
46
|
end
|
43
47
|
end
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# A MongoDB drop collection operation.
|
20
20
|
#
|
21
21
|
# @example Instantiate the operation.
|
22
|
-
#
|
22
|
+
# Drop.new(selector: { drop: 'test' }, :db_name => 'test')
|
23
23
|
#
|
24
24
|
# Initialization:
|
25
25
|
# param [ Hash ] spec The specifications for the operation.
|
@@ -37,7 +37,11 @@ module Mongo
|
|
37
37
|
|
38
38
|
def message(server)
|
39
39
|
sel = update_selector_for_write_concern(selector, server)
|
40
|
-
|
40
|
+
if server.features.op_msg_enabled?
|
41
|
+
command_op_msg(server, sel, options)
|
42
|
+
else
|
43
|
+
Protocol::Query.new(db_name, query_coll, sel, options)
|
44
|
+
end
|
41
45
|
end
|
42
46
|
end
|
43
47
|
end
|
@@ -19,7 +19,7 @@ module Mongo
|
|
19
19
|
# A MongoDB drop database operation.
|
20
20
|
#
|
21
21
|
# @example Instantiate the operation.
|
22
|
-
#
|
22
|
+
# Drop.new(selector: { dropDatabase: 'test' }, :db_name => 'test')
|
23
23
|
#
|
24
24
|
# Initialization:
|
25
25
|
# param [ Hash ] spec The specifications for the operation.
|
@@ -37,7 +37,11 @@ module Mongo
|
|
37
37
|
|
38
38
|
def message(server)
|
39
39
|
sel = update_selector_for_write_concern(selector, server)
|
40
|
-
|
40
|
+
if server.features.op_msg_enabled?
|
41
|
+
command_op_msg(server, sel, options)
|
42
|
+
else
|
43
|
+
Protocol::Query.new(db_name, query_coll, sel, options)
|
44
|
+
end
|
41
45
|
end
|
42
46
|
end
|
43
47
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Copyright (C) 2017 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
|
+
module Operation
|
17
|
+
module Commands
|
18
|
+
|
19
|
+
# Encapsulates behaviour for executing a find command with explain.
|
20
|
+
#
|
21
|
+
# @since 2.5.0
|
22
|
+
class Explain < Command; end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
require 'mongo/operation/commands/explain/result'
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Copyright (C) 2017 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
|
+
module Operation
|
17
|
+
module Commands
|
18
|
+
class Explain
|
19
|
+
|
20
|
+
# Defines custom behaviour of results in find command with explain.
|
21
|
+
#
|
22
|
+
# @since 2.5.0
|
23
|
+
class Result < Operation::Result
|
24
|
+
|
25
|
+
# Get the cursor id.
|
26
|
+
#
|
27
|
+
# @example Get the cursor id.
|
28
|
+
# result.cursor_id
|
29
|
+
#
|
30
|
+
# @return [ 0 ] Always 0 because explain doesn't return a cursor.
|
31
|
+
#
|
32
|
+
# @since 2.5.0
|
33
|
+
def cursor_id
|
34
|
+
0
|
35
|
+
end
|
36
|
+
|
37
|
+
# Get the documents in the result.
|
38
|
+
#
|
39
|
+
# @example Get the documents.
|
40
|
+
# result.documents
|
41
|
+
#
|
42
|
+
# @return [ Array<BSON::Document> ] The documents.
|
43
|
+
#
|
44
|
+
# @since 2.5.0
|
45
|
+
def documents
|
46
|
+
reply.documents
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -21,7 +21,7 @@ module Mongo
|
|
21
21
|
# Initialize the get indexes operation.
|
22
22
|
#
|
23
23
|
# @example Instantiate the operation.
|
24
|
-
#
|
24
|
+
# Indexes.new(:db_name => 'test', :coll_name => 'test_coll')
|
25
25
|
#
|
26
26
|
# Initialization:
|
27
27
|
# param [ Hash ] spec The specifications for the insert.
|