mongo 2.5.1 → 2.5.2
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/Rakefile +1 -1
- data/lib/mongo/auth/user/view.rb +4 -4
- data/lib/mongo/bulk_write.rb +14 -19
- data/lib/mongo/cluster.rb +4 -2
- data/lib/mongo/cluster/app_metadata.rb +1 -1
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +1 -1
- data/lib/mongo/collection.rb +13 -13
- data/lib/mongo/collection/view.rb +2 -1
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +4 -4
- data/lib/mongo/collection/view/map_reduce.rb +3 -3
- data/lib/mongo/collection/view/readable.rb +26 -20
- data/lib/mongo/collection/view/writable.rb +12 -12
- data/lib/mongo/cursor.rb +4 -7
- data/lib/mongo/database.rb +2 -2
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/grid/stream/write.rb +1 -1
- data/lib/mongo/index/view.rb +3 -3
- data/lib/mongo/operation.rb +38 -24
- data/lib/mongo/operation/aggregate.rb +53 -0
- data/lib/mongo/operation/aggregate/command.rb +59 -0
- data/lib/mongo/operation/aggregate/op_msg.rb +54 -0
- data/lib/mongo/operation/aggregate/result.rb +87 -0
- data/lib/mongo/operation/collections_info.rb +62 -0
- data/lib/mongo/operation/collections_info/result.rb +39 -0
- data/lib/mongo/operation/{executable.rb → command.rb} +16 -13
- data/lib/mongo/operation/command/command.rb +38 -0
- data/lib/mongo/operation/command/op_msg.rb +53 -0
- data/lib/mongo/operation/count.rb +48 -0
- data/lib/mongo/operation/count/command.rb +38 -0
- data/lib/mongo/operation/count/op_msg.rb +38 -0
- data/lib/mongo/operation/create.rb +48 -0
- data/lib/mongo/operation/create/command.rb +38 -0
- data/lib/mongo/operation/create/op_msg.rb +37 -0
- data/lib/mongo/operation/create_index.rb +48 -0
- data/lib/mongo/operation/create_index/command.rb +42 -0
- data/lib/mongo/operation/create_index/op_msg.rb +41 -0
- data/lib/mongo/operation/create_user.rb +48 -0
- data/lib/mongo/operation/{commands → create_user}/command.rb +13 -19
- data/lib/mongo/operation/create_user/op_msg.rb +41 -0
- data/lib/mongo/operation/delete.rb +38 -0
- data/lib/mongo/operation/delete/bulk_result.rb +46 -0
- data/lib/mongo/operation/delete/command.rb +59 -0
- data/lib/mongo/operation/delete/legacy.rb +69 -0
- data/lib/mongo/operation/delete/op_msg.rb +60 -0
- data/lib/mongo/operation/{write/delete → delete}/result.rb +18 -16
- data/lib/mongo/operation/distinct.rb +48 -0
- data/lib/mongo/operation/distinct/command.rb +38 -0
- data/lib/mongo/operation/distinct/op_msg.rb +38 -0
- data/lib/mongo/operation/drop.rb +48 -0
- data/lib/mongo/operation/drop/command.rb +38 -0
- data/lib/mongo/operation/{commands/count.rb → drop/op_msg.rb} +16 -6
- data/lib/mongo/operation/drop_database.rb +48 -0
- data/lib/mongo/operation/drop_database/command.rb +38 -0
- data/lib/mongo/operation/drop_database/op_msg.rb +37 -0
- data/lib/mongo/operation/drop_index.rb +48 -0
- data/lib/mongo/operation/drop_index/command.rb +42 -0
- data/lib/mongo/operation/{limited.rb → drop_index/op_msg.rb} +19 -15
- data/lib/mongo/operation/explain.rb +52 -0
- data/lib/mongo/operation/explain/command.rb +54 -0
- data/lib/mongo/operation/explain/legacy.rb +53 -0
- data/lib/mongo/operation/explain/op_msg.rb +54 -0
- data/lib/mongo/operation/explain/result.rb +50 -0
- data/lib/mongo/operation/find.rb +52 -0
- data/lib/mongo/operation/find/command.rb +54 -0
- data/lib/mongo/operation/find/legacy.rb +55 -0
- data/lib/mongo/operation/{read/query → find/legacy}/result.rb +3 -3
- data/lib/mongo/operation/find/op_msg.rb +59 -0
- data/lib/mongo/operation/find/result.rb +60 -0
- data/lib/mongo/operation/{commands/users_info/result.rb → get_more.rb} +20 -22
- data/lib/mongo/operation/get_more/command.rb +54 -0
- data/lib/mongo/operation/{commands/find.rb → get_more/legacy.rb} +15 -8
- data/lib/mongo/operation/get_more/op_msg.rb +58 -0
- data/lib/mongo/operation/get_more/result.rb +60 -0
- data/lib/mongo/operation/indexes.rb +52 -0
- data/lib/mongo/operation/indexes/command.rb +54 -0
- data/lib/mongo/operation/indexes/legacy.rb +57 -0
- data/lib/mongo/operation/indexes/op_msg.rb +54 -0
- data/lib/mongo/operation/indexes/result.rb +97 -0
- data/lib/mongo/operation/insert.rb +40 -0
- data/lib/mongo/operation/insert/bulk_result.rb +70 -0
- data/lib/mongo/operation/insert/command.rb +65 -0
- data/lib/mongo/operation/insert/legacy.rb +72 -0
- data/lib/mongo/operation/insert/op_msg.rb +61 -0
- data/lib/mongo/operation/insert/result.rb +64 -0
- data/lib/mongo/operation/kill_cursors.rb +25 -14
- data/lib/mongo/operation/{takes_write_concern.rb → kill_cursors/command.rb} +14 -12
- data/lib/mongo/operation/kill_cursors/legacy.rb +37 -0
- data/lib/mongo/operation/kill_cursors/op_msg.rb +37 -0
- data/lib/mongo/operation/list_collections.rb +49 -0
- data/lib/mongo/operation/list_collections/command.rb +60 -0
- data/lib/mongo/operation/list_collections/op_msg.rb +53 -0
- data/lib/mongo/operation/list_collections/result.rb +92 -0
- data/lib/mongo/operation/map_reduce.rb +49 -0
- data/lib/mongo/operation/map_reduce/command.rb +55 -0
- data/lib/mongo/operation/map_reduce/op_msg.rb +54 -0
- data/lib/mongo/operation/map_reduce/result.rb +129 -0
- data/lib/mongo/operation/parallel_scan.rb +49 -0
- data/lib/mongo/operation/parallel_scan/command.rb +67 -0
- data/lib/mongo/operation/parallel_scan/op_msg.rb +61 -0
- data/lib/mongo/operation/parallel_scan/result.rb +61 -0
- data/lib/mongo/operation/remove_user.rb +48 -0
- data/lib/mongo/operation/remove_user/command.rb +42 -0
- data/lib/mongo/operation/remove_user/op_msg.rb +41 -0
- data/lib/mongo/operation/result.rb +3 -1
- data/lib/mongo/operation/shared/bypass_document_validation.rb +36 -0
- data/lib/mongo/operation/{causally_consistent.rb → shared/causal_consistency_supported.rb} +5 -5
- data/lib/mongo/operation/shared/executable.rb +45 -0
- data/lib/mongo/operation/shared/idable.rb +64 -0
- data/lib/mongo/operation/{commands/distinct.rb → shared/limited.rb} +10 -7
- data/lib/mongo/operation/{object_id_generator.rb → shared/object_id_generator.rb} +2 -2
- data/lib/mongo/operation/{read_preference.rb → shared/read_preference_supported.rb} +14 -24
- data/lib/mongo/operation/shared/result/aggregatable.rb +75 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +79 -0
- data/lib/mongo/operation/{specifiable.rb → shared/specifiable.rb} +40 -4
- data/lib/mongo/operation/shared/write.rb +81 -0
- data/lib/mongo/operation/shared/write_concern_supported.rb +39 -0
- data/lib/mongo/operation/update.rb +38 -0
- data/lib/mongo/operation/update/bulk_result.rb +126 -0
- data/lib/mongo/operation/update/command.rb +60 -0
- data/lib/mongo/operation/update/legacy.rb +80 -0
- data/lib/mongo/operation/{write/update → update/legacy}/result.rb +4 -82
- data/lib/mongo/operation/update/op_msg.rb +60 -0
- data/lib/mongo/operation/update/result.rb +102 -0
- data/lib/mongo/operation/update_user.rb +48 -0
- data/lib/mongo/operation/update_user/command.rb +41 -0
- data/lib/mongo/operation/update_user/op_msg.rb +41 -0
- data/lib/mongo/operation/users_info.rb +49 -0
- data/lib/mongo/operation/users_info/command.rb +58 -0
- data/lib/mongo/operation/users_info/op_msg.rb +57 -0
- data/lib/mongo/operation/{commands/collections_info → users_info}/result.rb +18 -17
- data/lib/mongo/server.rb +3 -5
- data/lib/mongo/server/connectable.rb +3 -3
- data/lib/mongo/server/connection.rb +14 -0
- data/lib/mongo/server_selector.rb +1 -1
- data/lib/mongo/server_selector/selectable.rb +3 -12
- data/lib/mongo/session.rb +13 -1
- data/lib/mongo/session/session_pool.rb +1 -1
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/client_spec.rb +15 -22
- data/spec/mongo/cluster/app_metadata_spec.rb +19 -3
- data/spec/mongo/cluster/cursor_reaper_spec.rb +37 -0
- data/spec/mongo/cluster_spec.rb +2 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection_spec.rb +105 -14
- data/spec/mongo/cursor_spec.rb +11 -11
- data/spec/mongo/grid/fs_bucket_spec.rb +5 -0
- data/spec/mongo/max_staleness_spec.rb +3 -1
- data/spec/mongo/operation/{commands/aggregate → aggregate}/result_spec.rb +1 -1
- data/spec/mongo/operation/{commands/aggregate_spec.rb → aggregate_spec.rb} +1 -1
- data/spec/mongo/operation/{commands/collections_info_spec.rb → collections_info_spec.rb} +4 -2
- data/spec/mongo/operation/{commands/command_spec.rb → command_spec.rb} +1 -1
- data/spec/mongo/operation/{write/command/create_index_spec.rb → create_index_spec.rb} +1 -1
- data/spec/mongo/operation/{write/create_user_spec.rb → create_user_spec.rb} +1 -1
- data/spec/mongo/operation/{write/bulk/delete_spec.rb → delete/bulk_spec.rb} +8 -8
- data/spec/mongo/operation/delete/command_spec.rb +111 -0
- data/spec/mongo/operation/{write/command/delete_spec.rb → delete/op_msg_spec.rb} +40 -34
- data/spec/mongo/operation/{write/delete_spec.rb → delete_spec.rb} +7 -7
- data/spec/mongo/operation/{write/command/drop_index_spec.rb → drop_index_spec.rb} +1 -1
- data/spec/mongo/operation/{read/query_spec.rb → find/legacy_spec.rb} +2 -2
- data/spec/mongo/operation/{read/get_more_spec.rb → get_more_spec.rb} +3 -3
- data/spec/mongo/operation/{commands/indexes_spec.rb → indexes_spec.rb} +6 -4
- data/spec/mongo/operation/{write/bulk/insert_spec.rb → insert/bulk_spec.rb} +9 -9
- data/spec/mongo/operation/insert/command_spec.rb +110 -0
- data/spec/mongo/operation/{write/command/insert_spec.rb → insert/op_msg_spec.rb} +51 -41
- data/spec/mongo/operation/{write/insert_spec.rb → insert_spec.rb} +2 -2
- data/spec/mongo/operation/kill_cursors_spec.rb +2 -2
- data/spec/mongo/operation/limited_spec.rb +3 -3
- data/spec/mongo/operation/{commands/map_reduce_spec.rb → map_reduce_spec.rb} +1 -1
- data/spec/mongo/operation/read_preference_spec.rb +2 -2
- data/spec/mongo/operation/{write/command/remove_user_spec.rb → remove_user_spec.rb} +1 -1
- data/spec/mongo/operation/{write/bulk/update_spec.rb → update/bulk_spec.rb} +8 -8
- data/spec/mongo/operation/update/command_spec.rb +114 -0
- data/spec/mongo/operation/{write/command/update_spec.rb → update/op_msg_spec.rb} +49 -40
- data/spec/mongo/operation/{write/update_spec.rb → update_spec.rb} +6 -6
- data/spec/mongo/operation/{write/command/update_user_spec.rb → update_user_spec.rb} +1 -1
- data/spec/mongo/server/connection_spec.rb +0 -22
- data/spec/mongo/server_selector_spec.rb +55 -0
- data/spec/mongo/server_spec.rb +0 -42
- data/spec/mongo/session/session_pool_spec.rb +1 -1
- data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
- data/spec/mongo/uri_spec.rb +2 -2
- data/spec/support/gridfs_tests/delete.yml +4 -38
- data/spec/support/gridfs_tests/download.yml +12 -30
- data/spec/support/server_selection.rb +1 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +15 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +15 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +0 -3
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +0 -3
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -1
- data/spec/support/server_selection/selection/Sharded/read/Nearest.yml +21 -0
- data/spec/support/server_selection/selection/Sharded/read/Primary.yml +19 -0
- data/spec/support/server_selection/selection/Sharded/read/PrimaryPreferred.yml +21 -0
- data/spec/support/server_selection/selection/Sharded/read/Secondary.yml +21 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +0 -5
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +0 -1
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -1
- data/spec/support/shared/session.rb +46 -5
- metadata +174 -116
- metadata.gz.sig +1 -2
- data/lib/mongo/operation/commands.rb +0 -31
- data/lib/mongo/operation/commands/aggregate.rb +0 -63
- data/lib/mongo/operation/commands/aggregate/result.rb +0 -89
- data/lib/mongo/operation/commands/collections_info.rb +0 -71
- data/lib/mongo/operation/commands/create.rb +0 -49
- data/lib/mongo/operation/commands/drop.rb +0 -49
- data/lib/mongo/operation/commands/drop_database.rb +0 -49
- data/lib/mongo/operation/commands/explain.rb +0 -27
- data/lib/mongo/operation/commands/explain/result.rb +0 -52
- data/lib/mongo/operation/commands/find/result.rb +0 -62
- data/lib/mongo/operation/commands/get_more.rb +0 -27
- data/lib/mongo/operation/commands/get_more/result.rb +0 -62
- data/lib/mongo/operation/commands/indexes.rb +0 -73
- data/lib/mongo/operation/commands/list_collections.rb +0 -48
- data/lib/mongo/operation/commands/list_collections/result.rb +0 -94
- data/lib/mongo/operation/commands/list_indexes.rb +0 -48
- data/lib/mongo/operation/commands/list_indexes/result.rb +0 -98
- data/lib/mongo/operation/commands/map_reduce.rb +0 -65
- data/lib/mongo/operation/commands/map_reduce/result.rb +0 -131
- data/lib/mongo/operation/commands/parallel_scan.rb +0 -54
- data/lib/mongo/operation/commands/parallel_scan/result.rb +0 -64
- data/lib/mongo/operation/commands/users_info.rb +0 -52
- data/lib/mongo/operation/read.rb +0 -16
- data/lib/mongo/operation/read/get_more.rb +0 -52
- data/lib/mongo/operation/read/query.rb +0 -55
- data/lib/mongo/operation/uses_command_op_msg.rb +0 -78
- data/lib/mongo/operation/write.rb +0 -22
- data/lib/mongo/operation/write/bulk.rb +0 -20
- data/lib/mongo/operation/write/bulk/bulkable.rb +0 -82
- data/lib/mongo/operation/write/bulk/delete.rb +0 -71
- data/lib/mongo/operation/write/bulk/delete/result.rb +0 -71
- data/lib/mongo/operation/write/bulk/insert.rb +0 -96
- data/lib/mongo/operation/write/bulk/insert/result.rb +0 -129
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +0 -87
- data/lib/mongo/operation/write/bulk/mergable.rb +0 -73
- data/lib/mongo/operation/write/bulk/update.rb +0 -81
- data/lib/mongo/operation/write/bulk/update/result.rb +0 -196
- data/lib/mongo/operation/write/command.rb +0 -23
- data/lib/mongo/operation/write/command/create_index.rb +0 -79
- data/lib/mongo/operation/write/command/create_user.rb +0 -61
- data/lib/mongo/operation/write/command/delete.rb +0 -79
- data/lib/mongo/operation/write/command/drop_index.rb +0 -80
- data/lib/mongo/operation/write/command/insert.rb +0 -69
- data/lib/mongo/operation/write/command/remove_user.rb +0 -60
- data/lib/mongo/operation/write/command/update.rb +0 -77
- data/lib/mongo/operation/write/command/update_user.rb +0 -61
- data/lib/mongo/operation/write/command/writable.rb +0 -70
- data/lib/mongo/operation/write/delete.rb +0 -75
- data/lib/mongo/operation/write/gle.rb +0 -49
- data/lib/mongo/operation/write/idable.rb +0 -63
- data/lib/mongo/operation/write/insert.rb +0 -74
- data/lib/mongo/operation/write/insert/result.rb +0 -62
- data/lib/mongo/operation/write/update.rb +0 -91
- data/lib/mongo/operation/write/write_command_enabled.rb +0 -77
@@ -0,0 +1,39 @@
|
|
1
|
+
# Copyright (C) 2015-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
|
+
|
18
|
+
# Custom behavior for operations that support write concern.
|
19
|
+
#
|
20
|
+
# @since 2.5.2
|
21
|
+
module WriteConcernSupported
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def write_concern_supported?(server); true; end
|
26
|
+
|
27
|
+
def command(server)
|
28
|
+
add_write_concern!(super, server)
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_write_concern!(sel, server)
|
32
|
+
if write_concern && write_concern_supported?(server)
|
33
|
+
sel[:writeConcern] = write_concern.options
|
34
|
+
end
|
35
|
+
sel
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# Copyright (C) 2015-2018 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/operation/update/command'
|
16
|
+
require 'mongo/operation/update/op_msg'
|
17
|
+
require 'mongo/operation/update/legacy'
|
18
|
+
require 'mongo/operation/update/result'
|
19
|
+
require 'mongo/operation/update/bulk_result'
|
20
|
+
|
21
|
+
module Mongo
|
22
|
+
module Operation
|
23
|
+
|
24
|
+
# A MongoDB update operation.
|
25
|
+
#
|
26
|
+
# @api private
|
27
|
+
#
|
28
|
+
# @since 2.0.0
|
29
|
+
class Update
|
30
|
+
include Specifiable
|
31
|
+
include Write
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
IDENTIFIER = 'updates'.freeze
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
# Copyright (C) 2014-2018 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
|
+
class Update
|
18
|
+
|
19
|
+
# Defines custom behaviour of results for an udpate when sent as part of a bulk write.
|
20
|
+
#
|
21
|
+
# @since 2.0.0
|
22
|
+
class BulkResult < Operation::Result
|
23
|
+
include Aggregatable
|
24
|
+
|
25
|
+
# The number of modified docs field in the result.
|
26
|
+
#
|
27
|
+
# @since 2.0.0
|
28
|
+
MODIFIED = 'nModified'.freeze
|
29
|
+
|
30
|
+
# The upserted docs field in the result.
|
31
|
+
#
|
32
|
+
# @since 2.0.0
|
33
|
+
UPSERTED = 'upserted'.freeze
|
34
|
+
|
35
|
+
# Gets the number of documents upserted.
|
36
|
+
#
|
37
|
+
# @example Get the upserted count.
|
38
|
+
# result.n_upserted
|
39
|
+
#
|
40
|
+
# @return [ Integer ] The number of documents upserted.
|
41
|
+
#
|
42
|
+
# @since 2.0.0
|
43
|
+
def n_upserted
|
44
|
+
return 0 unless acknowledged?
|
45
|
+
@replies.reduce(0) do |n, reply|
|
46
|
+
if upsert?(reply)
|
47
|
+
n += reply.documents.first[UPSERTED].size
|
48
|
+
else
|
49
|
+
n
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Gets the number of documents matched.
|
55
|
+
#
|
56
|
+
# @example Get the matched count.
|
57
|
+
# result.n_matched
|
58
|
+
#
|
59
|
+
# @return [ Integer ] The number of documents matched.
|
60
|
+
#
|
61
|
+
# @since 2.0.0
|
62
|
+
def n_matched
|
63
|
+
return 0 unless acknowledged?
|
64
|
+
@replies.reduce(0) do |n, reply|
|
65
|
+
if upsert?(reply)
|
66
|
+
reply.documents.first[N] - n_upserted
|
67
|
+
else
|
68
|
+
if reply.documents.first[N]
|
69
|
+
n += reply.documents.first[N]
|
70
|
+
else
|
71
|
+
n
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Gets the number of documents modified.
|
78
|
+
# Not that in a mixed sharded cluster a call to
|
79
|
+
# update could return nModified (>= 2.6) or not (<= 2.4).
|
80
|
+
# If any call does not return nModified we can't report
|
81
|
+
# a valid final count so set the field to nil.
|
82
|
+
#
|
83
|
+
# @example Get the modified count.
|
84
|
+
# result.n_modified
|
85
|
+
#
|
86
|
+
# @return [ Integer ] The number of documents modified.
|
87
|
+
#
|
88
|
+
# @since 2.0.0
|
89
|
+
def n_modified
|
90
|
+
return 0 unless acknowledged?
|
91
|
+
@replies.reduce(0) do |n, reply|
|
92
|
+
if n && reply.documents.first[MODIFIED]
|
93
|
+
n += reply.documents.first[MODIFIED]
|
94
|
+
else
|
95
|
+
0
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Get the upserted documents.
|
101
|
+
#
|
102
|
+
# @example Get upserted documents.
|
103
|
+
# result.upserted
|
104
|
+
#
|
105
|
+
# @return [ Array<BSON::Document> ] The upserted document info
|
106
|
+
#
|
107
|
+
# @since 2.1.0
|
108
|
+
def upserted
|
109
|
+
return [] unless acknowledged?
|
110
|
+
@replies.reduce([]) do |ids, reply|
|
111
|
+
if upserted_ids = reply.documents.first[UPSERTED]
|
112
|
+
ids += upserted_ids
|
113
|
+
end
|
114
|
+
ids
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def upsert?(reply)
|
121
|
+
upserted.any?
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Copyright (C) 2018 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
|
+
class Update
|
18
|
+
|
19
|
+
# A MongoDB update operation sent as a command message.
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
#
|
23
|
+
# @since 2.5.2
|
24
|
+
class Command
|
25
|
+
include Specifiable
|
26
|
+
include Executable
|
27
|
+
include Limited
|
28
|
+
include WriteConcernSupported
|
29
|
+
include BypassDocumentValidation
|
30
|
+
|
31
|
+
# Execute the operation.
|
32
|
+
#
|
33
|
+
# @example
|
34
|
+
# operation.execute(server)
|
35
|
+
#
|
36
|
+
# @param [ Mongo::Server ] server The server to send the operation to.
|
37
|
+
#
|
38
|
+
# @return [ Mongo::Operation::Update::Result ] The operation result.
|
39
|
+
#
|
40
|
+
# @since 2.5.2
|
41
|
+
def execute(server)
|
42
|
+
result = Result.new(dispatch_message(server))
|
43
|
+
process_result(result, server)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def selector(server)
|
49
|
+
{ update: coll_name,
|
50
|
+
updates: send(IDENTIFIER),
|
51
|
+
ordered: ordered? }
|
52
|
+
end
|
53
|
+
|
54
|
+
def message(server)
|
55
|
+
Protocol::Query.new(db_name, Database::COMMAND, command(server), options)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# Copyright (C) 2018 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/operation/update/legacy/result'
|
16
|
+
|
17
|
+
module Mongo
|
18
|
+
module Operation
|
19
|
+
class Update
|
20
|
+
|
21
|
+
# A MongoDB update operation sent as a legacy wire protocol message.
|
22
|
+
#
|
23
|
+
# @api private
|
24
|
+
#
|
25
|
+
# @since 2.5.2
|
26
|
+
class Legacy
|
27
|
+
include Specifiable
|
28
|
+
include Executable
|
29
|
+
|
30
|
+
# Execute the operation.
|
31
|
+
#
|
32
|
+
# @example
|
33
|
+
# operation.execute(server)
|
34
|
+
#
|
35
|
+
# @param [ Mongo::Server ] server The server to send the operation to.
|
36
|
+
#
|
37
|
+
# @return [ Mongo::Operation::Update::Result ] The operation result.
|
38
|
+
#
|
39
|
+
# @since 2.5.2
|
40
|
+
def execute(server)
|
41
|
+
result = Result.new(dispatch_message(server))
|
42
|
+
process_result(result, server)
|
43
|
+
result.validate!
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def selector
|
49
|
+
send(IDENTIFIER).first
|
50
|
+
end
|
51
|
+
|
52
|
+
def message(server)
|
53
|
+
flags = []
|
54
|
+
flags << :multi_update if selector[Operation::MULTI]
|
55
|
+
flags << :upsert if selector[Operation::UPSERT]
|
56
|
+
|
57
|
+
Protocol::Update.new(
|
58
|
+
db_name,
|
59
|
+
coll_name,
|
60
|
+
selector[Operation::Q],
|
61
|
+
selector[Operation::U],
|
62
|
+
flags.empty? ? {} : { flags: flags }
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
def gle
|
67
|
+
wc = write_concern || WriteConcern.get(WriteConcern::DEFAULT)
|
68
|
+
if gle_message = wc.get_last_error
|
69
|
+
Protocol::Query.new(
|
70
|
+
db_name,
|
71
|
+
Database::COMMAND,
|
72
|
+
gle_message,
|
73
|
+
options.merge(limit: -1)
|
74
|
+
)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C)
|
1
|
+
# Copyright (C) 2015-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -14,92 +14,14 @@
|
|
14
14
|
|
15
15
|
module Mongo
|
16
16
|
module Operation
|
17
|
-
|
18
|
-
class
|
19
|
-
|
20
|
-
# Defines custom behaviour of results for an update.
|
21
|
-
#
|
22
|
-
# @since 2.0.0
|
23
|
-
class Result < Operation::Result
|
24
|
-
|
25
|
-
# The number of modified docs field in the result.
|
26
|
-
#
|
27
|
-
# @since 2.0.0
|
28
|
-
MODIFIED = 'nModified'.freeze
|
29
|
-
|
30
|
-
# The upserted docs field in the result.
|
31
|
-
#
|
32
|
-
# @since 2.0.0
|
33
|
-
UPSERTED = 'upserted'.freeze
|
34
|
-
|
35
|
-
# Get the number of documents matched.
|
36
|
-
#
|
37
|
-
# @example Get the matched count.
|
38
|
-
# result.matched_count
|
39
|
-
#
|
40
|
-
# @return [ Integer ] The matched count.
|
41
|
-
#
|
42
|
-
# @since 2.0.0
|
43
|
-
def matched_count
|
44
|
-
return 0 unless acknowledged?
|
45
|
-
if upsert?
|
46
|
-
0
|
47
|
-
else
|
48
|
-
n
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# Get the number of documents modified.
|
53
|
-
#
|
54
|
-
# @example Get the modified count.
|
55
|
-
# result.modified_count
|
56
|
-
#
|
57
|
-
# @return [ Integer ] The modified count.
|
58
|
-
#
|
59
|
-
# @since 2.0.0
|
60
|
-
def modified_count
|
61
|
-
return 0 unless acknowledged?
|
62
|
-
first[MODIFIED]
|
63
|
-
end
|
64
|
-
|
65
|
-
# The identifier of the inserted document if an upsert
|
66
|
-
# took place.
|
67
|
-
#
|
68
|
-
# @example Get the upserted document's identifier.
|
69
|
-
# result.upserted_id
|
70
|
-
#
|
71
|
-
# @return [ Object ] The upserted id.
|
72
|
-
#
|
73
|
-
# @since 2.0.0
|
74
|
-
def upserted_id
|
75
|
-
return nil unless upsert?
|
76
|
-
upsert?.first['_id']
|
77
|
-
end
|
78
|
-
|
79
|
-
# Returns the number of documents upserted.
|
80
|
-
#
|
81
|
-
# @example Get the number of upserted documents.
|
82
|
-
# result.upserted_count
|
83
|
-
#
|
84
|
-
# @return [ Integer ] The number upserted.
|
85
|
-
#
|
86
|
-
# @since 2.4.2
|
87
|
-
def upserted_count
|
88
|
-
upsert? ? n : 0
|
89
|
-
end
|
90
|
-
|
91
|
-
private
|
92
|
-
|
93
|
-
def upsert?
|
94
|
-
first[UPSERTED]
|
95
|
-
end
|
96
|
-
end
|
17
|
+
class Update
|
18
|
+
class Legacy
|
97
19
|
|
98
20
|
# Defines custom behaviour of results for an update on server
|
99
21
|
# version <= 2.4.
|
100
22
|
#
|
101
23
|
# @since 2.0.0
|
102
|
-
class
|
24
|
+
class Result < Operation::Result
|
103
25
|
|
104
26
|
# Whether an existing document was updated.
|
105
27
|
#
|