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.
Files changed (275) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +3 -2
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +1 -1
  5. data/lib/mongo/auth/user/view.rb +4 -4
  6. data/lib/mongo/bulk_write.rb +14 -19
  7. data/lib/mongo/cluster.rb +4 -2
  8. data/lib/mongo/cluster/app_metadata.rb +1 -1
  9. data/lib/mongo/cluster/reapers/cursor_reaper.rb +1 -1
  10. data/lib/mongo/collection.rb +13 -13
  11. data/lib/mongo/collection/view.rb +2 -1
  12. data/lib/mongo/collection/view/aggregation.rb +1 -1
  13. data/lib/mongo/collection/view/change_stream.rb +1 -1
  14. data/lib/mongo/collection/view/iterable.rb +4 -4
  15. data/lib/mongo/collection/view/map_reduce.rb +3 -3
  16. data/lib/mongo/collection/view/readable.rb +26 -20
  17. data/lib/mongo/collection/view/writable.rb +12 -12
  18. data/lib/mongo/cursor.rb +4 -7
  19. data/lib/mongo/database.rb +2 -2
  20. data/lib/mongo/database/view.rb +1 -1
  21. data/lib/mongo/grid/stream/write.rb +1 -1
  22. data/lib/mongo/index/view.rb +3 -3
  23. data/lib/mongo/operation.rb +38 -24
  24. data/lib/mongo/operation/aggregate.rb +53 -0
  25. data/lib/mongo/operation/aggregate/command.rb +59 -0
  26. data/lib/mongo/operation/aggregate/op_msg.rb +54 -0
  27. data/lib/mongo/operation/aggregate/result.rb +87 -0
  28. data/lib/mongo/operation/collections_info.rb +62 -0
  29. data/lib/mongo/operation/collections_info/result.rb +39 -0
  30. data/lib/mongo/operation/{executable.rb → command.rb} +16 -13
  31. data/lib/mongo/operation/command/command.rb +38 -0
  32. data/lib/mongo/operation/command/op_msg.rb +53 -0
  33. data/lib/mongo/operation/count.rb +48 -0
  34. data/lib/mongo/operation/count/command.rb +38 -0
  35. data/lib/mongo/operation/count/op_msg.rb +38 -0
  36. data/lib/mongo/operation/create.rb +48 -0
  37. data/lib/mongo/operation/create/command.rb +38 -0
  38. data/lib/mongo/operation/create/op_msg.rb +37 -0
  39. data/lib/mongo/operation/create_index.rb +48 -0
  40. data/lib/mongo/operation/create_index/command.rb +42 -0
  41. data/lib/mongo/operation/create_index/op_msg.rb +41 -0
  42. data/lib/mongo/operation/create_user.rb +48 -0
  43. data/lib/mongo/operation/{commands → create_user}/command.rb +13 -19
  44. data/lib/mongo/operation/create_user/op_msg.rb +41 -0
  45. data/lib/mongo/operation/delete.rb +38 -0
  46. data/lib/mongo/operation/delete/bulk_result.rb +46 -0
  47. data/lib/mongo/operation/delete/command.rb +59 -0
  48. data/lib/mongo/operation/delete/legacy.rb +69 -0
  49. data/lib/mongo/operation/delete/op_msg.rb +60 -0
  50. data/lib/mongo/operation/{write/delete → delete}/result.rb +18 -16
  51. data/lib/mongo/operation/distinct.rb +48 -0
  52. data/lib/mongo/operation/distinct/command.rb +38 -0
  53. data/lib/mongo/operation/distinct/op_msg.rb +38 -0
  54. data/lib/mongo/operation/drop.rb +48 -0
  55. data/lib/mongo/operation/drop/command.rb +38 -0
  56. data/lib/mongo/operation/{commands/count.rb → drop/op_msg.rb} +16 -6
  57. data/lib/mongo/operation/drop_database.rb +48 -0
  58. data/lib/mongo/operation/drop_database/command.rb +38 -0
  59. data/lib/mongo/operation/drop_database/op_msg.rb +37 -0
  60. data/lib/mongo/operation/drop_index.rb +48 -0
  61. data/lib/mongo/operation/drop_index/command.rb +42 -0
  62. data/lib/mongo/operation/{limited.rb → drop_index/op_msg.rb} +19 -15
  63. data/lib/mongo/operation/explain.rb +52 -0
  64. data/lib/mongo/operation/explain/command.rb +54 -0
  65. data/lib/mongo/operation/explain/legacy.rb +53 -0
  66. data/lib/mongo/operation/explain/op_msg.rb +54 -0
  67. data/lib/mongo/operation/explain/result.rb +50 -0
  68. data/lib/mongo/operation/find.rb +52 -0
  69. data/lib/mongo/operation/find/command.rb +54 -0
  70. data/lib/mongo/operation/find/legacy.rb +55 -0
  71. data/lib/mongo/operation/{read/query → find/legacy}/result.rb +3 -3
  72. data/lib/mongo/operation/find/op_msg.rb +59 -0
  73. data/lib/mongo/operation/find/result.rb +60 -0
  74. data/lib/mongo/operation/{commands/users_info/result.rb → get_more.rb} +20 -22
  75. data/lib/mongo/operation/get_more/command.rb +54 -0
  76. data/lib/mongo/operation/{commands/find.rb → get_more/legacy.rb} +15 -8
  77. data/lib/mongo/operation/get_more/op_msg.rb +58 -0
  78. data/lib/mongo/operation/get_more/result.rb +60 -0
  79. data/lib/mongo/operation/indexes.rb +52 -0
  80. data/lib/mongo/operation/indexes/command.rb +54 -0
  81. data/lib/mongo/operation/indexes/legacy.rb +57 -0
  82. data/lib/mongo/operation/indexes/op_msg.rb +54 -0
  83. data/lib/mongo/operation/indexes/result.rb +97 -0
  84. data/lib/mongo/operation/insert.rb +40 -0
  85. data/lib/mongo/operation/insert/bulk_result.rb +70 -0
  86. data/lib/mongo/operation/insert/command.rb +65 -0
  87. data/lib/mongo/operation/insert/legacy.rb +72 -0
  88. data/lib/mongo/operation/insert/op_msg.rb +61 -0
  89. data/lib/mongo/operation/insert/result.rb +64 -0
  90. data/lib/mongo/operation/kill_cursors.rb +25 -14
  91. data/lib/mongo/operation/{takes_write_concern.rb → kill_cursors/command.rb} +14 -12
  92. data/lib/mongo/operation/kill_cursors/legacy.rb +37 -0
  93. data/lib/mongo/operation/kill_cursors/op_msg.rb +37 -0
  94. data/lib/mongo/operation/list_collections.rb +49 -0
  95. data/lib/mongo/operation/list_collections/command.rb +60 -0
  96. data/lib/mongo/operation/list_collections/op_msg.rb +53 -0
  97. data/lib/mongo/operation/list_collections/result.rb +92 -0
  98. data/lib/mongo/operation/map_reduce.rb +49 -0
  99. data/lib/mongo/operation/map_reduce/command.rb +55 -0
  100. data/lib/mongo/operation/map_reduce/op_msg.rb +54 -0
  101. data/lib/mongo/operation/map_reduce/result.rb +129 -0
  102. data/lib/mongo/operation/parallel_scan.rb +49 -0
  103. data/lib/mongo/operation/parallel_scan/command.rb +67 -0
  104. data/lib/mongo/operation/parallel_scan/op_msg.rb +61 -0
  105. data/lib/mongo/operation/parallel_scan/result.rb +61 -0
  106. data/lib/mongo/operation/remove_user.rb +48 -0
  107. data/lib/mongo/operation/remove_user/command.rb +42 -0
  108. data/lib/mongo/operation/remove_user/op_msg.rb +41 -0
  109. data/lib/mongo/operation/result.rb +3 -1
  110. data/lib/mongo/operation/shared/bypass_document_validation.rb +36 -0
  111. data/lib/mongo/operation/{causally_consistent.rb → shared/causal_consistency_supported.rb} +5 -5
  112. data/lib/mongo/operation/shared/executable.rb +45 -0
  113. data/lib/mongo/operation/shared/idable.rb +64 -0
  114. data/lib/mongo/operation/{commands/distinct.rb → shared/limited.rb} +10 -7
  115. data/lib/mongo/operation/{object_id_generator.rb → shared/object_id_generator.rb} +2 -2
  116. data/lib/mongo/operation/{read_preference.rb → shared/read_preference_supported.rb} +14 -24
  117. data/lib/mongo/operation/shared/result/aggregatable.rb +75 -0
  118. data/lib/mongo/operation/shared/sessions_supported.rb +79 -0
  119. data/lib/mongo/operation/{specifiable.rb → shared/specifiable.rb} +40 -4
  120. data/lib/mongo/operation/shared/write.rb +81 -0
  121. data/lib/mongo/operation/shared/write_concern_supported.rb +39 -0
  122. data/lib/mongo/operation/update.rb +38 -0
  123. data/lib/mongo/operation/update/bulk_result.rb +126 -0
  124. data/lib/mongo/operation/update/command.rb +60 -0
  125. data/lib/mongo/operation/update/legacy.rb +80 -0
  126. data/lib/mongo/operation/{write/update → update/legacy}/result.rb +4 -82
  127. data/lib/mongo/operation/update/op_msg.rb +60 -0
  128. data/lib/mongo/operation/update/result.rb +102 -0
  129. data/lib/mongo/operation/update_user.rb +48 -0
  130. data/lib/mongo/operation/update_user/command.rb +41 -0
  131. data/lib/mongo/operation/update_user/op_msg.rb +41 -0
  132. data/lib/mongo/operation/users_info.rb +49 -0
  133. data/lib/mongo/operation/users_info/command.rb +58 -0
  134. data/lib/mongo/operation/users_info/op_msg.rb +57 -0
  135. data/lib/mongo/operation/{commands/collections_info → users_info}/result.rb +18 -17
  136. data/lib/mongo/server.rb +3 -5
  137. data/lib/mongo/server/connectable.rb +3 -3
  138. data/lib/mongo/server/connection.rb +14 -0
  139. data/lib/mongo/server_selector.rb +1 -1
  140. data/lib/mongo/server_selector/selectable.rb +3 -12
  141. data/lib/mongo/session.rb +13 -1
  142. data/lib/mongo/session/session_pool.rb +1 -1
  143. data/lib/mongo/version.rb +1 -1
  144. data/spec/mongo/client_spec.rb +15 -22
  145. data/spec/mongo/cluster/app_metadata_spec.rb +19 -3
  146. data/spec/mongo/cluster/cursor_reaper_spec.rb +37 -0
  147. data/spec/mongo/cluster_spec.rb +2 -2
  148. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  149. data/spec/mongo/collection_spec.rb +105 -14
  150. data/spec/mongo/cursor_spec.rb +11 -11
  151. data/spec/mongo/grid/fs_bucket_spec.rb +5 -0
  152. data/spec/mongo/max_staleness_spec.rb +3 -1
  153. data/spec/mongo/operation/{commands/aggregate → aggregate}/result_spec.rb +1 -1
  154. data/spec/mongo/operation/{commands/aggregate_spec.rb → aggregate_spec.rb} +1 -1
  155. data/spec/mongo/operation/{commands/collections_info_spec.rb → collections_info_spec.rb} +4 -2
  156. data/spec/mongo/operation/{commands/command_spec.rb → command_spec.rb} +1 -1
  157. data/spec/mongo/operation/{write/command/create_index_spec.rb → create_index_spec.rb} +1 -1
  158. data/spec/mongo/operation/{write/create_user_spec.rb → create_user_spec.rb} +1 -1
  159. data/spec/mongo/operation/{write/bulk/delete_spec.rb → delete/bulk_spec.rb} +8 -8
  160. data/spec/mongo/operation/delete/command_spec.rb +111 -0
  161. data/spec/mongo/operation/{write/command/delete_spec.rb → delete/op_msg_spec.rb} +40 -34
  162. data/spec/mongo/operation/{write/delete_spec.rb → delete_spec.rb} +7 -7
  163. data/spec/mongo/operation/{write/command/drop_index_spec.rb → drop_index_spec.rb} +1 -1
  164. data/spec/mongo/operation/{read/query_spec.rb → find/legacy_spec.rb} +2 -2
  165. data/spec/mongo/operation/{read/get_more_spec.rb → get_more_spec.rb} +3 -3
  166. data/spec/mongo/operation/{commands/indexes_spec.rb → indexes_spec.rb} +6 -4
  167. data/spec/mongo/operation/{write/bulk/insert_spec.rb → insert/bulk_spec.rb} +9 -9
  168. data/spec/mongo/operation/insert/command_spec.rb +110 -0
  169. data/spec/mongo/operation/{write/command/insert_spec.rb → insert/op_msg_spec.rb} +51 -41
  170. data/spec/mongo/operation/{write/insert_spec.rb → insert_spec.rb} +2 -2
  171. data/spec/mongo/operation/kill_cursors_spec.rb +2 -2
  172. data/spec/mongo/operation/limited_spec.rb +3 -3
  173. data/spec/mongo/operation/{commands/map_reduce_spec.rb → map_reduce_spec.rb} +1 -1
  174. data/spec/mongo/operation/read_preference_spec.rb +2 -2
  175. data/spec/mongo/operation/{write/command/remove_user_spec.rb → remove_user_spec.rb} +1 -1
  176. data/spec/mongo/operation/{write/bulk/update_spec.rb → update/bulk_spec.rb} +8 -8
  177. data/spec/mongo/operation/update/command_spec.rb +114 -0
  178. data/spec/mongo/operation/{write/command/update_spec.rb → update/op_msg_spec.rb} +49 -40
  179. data/spec/mongo/operation/{write/update_spec.rb → update_spec.rb} +6 -6
  180. data/spec/mongo/operation/{write/command/update_user_spec.rb → update_user_spec.rb} +1 -1
  181. data/spec/mongo/server/connection_spec.rb +0 -22
  182. data/spec/mongo/server_selector_spec.rb +55 -0
  183. data/spec/mongo/server_spec.rb +0 -42
  184. data/spec/mongo/session/session_pool_spec.rb +1 -1
  185. data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
  186. data/spec/mongo/uri_spec.rb +2 -2
  187. data/spec/support/gridfs_tests/delete.yml +4 -38
  188. data/spec/support/gridfs_tests/download.yml +12 -30
  189. data/spec/support/server_selection.rb +1 -1
  190. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +0 -1
  191. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +0 -1
  192. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -1
  193. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +15 -0
  194. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +15 -0
  195. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +0 -3
  196. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -1
  197. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
  198. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +0 -1
  199. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -1
  200. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
  201. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -1
  202. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +0 -1
  203. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +0 -1
  204. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -1
  205. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +0 -3
  206. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -1
  207. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
  208. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +0 -1
  209. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -1
  210. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
  211. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -1
  212. data/spec/support/server_selection/selection/Sharded/read/Nearest.yml +21 -0
  213. data/spec/support/server_selection/selection/Sharded/read/Primary.yml +19 -0
  214. data/spec/support/server_selection/selection/Sharded/read/PrimaryPreferred.yml +21 -0
  215. data/spec/support/server_selection/selection/Sharded/read/Secondary.yml +21 -0
  216. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +0 -5
  217. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +0 -1
  218. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -1
  219. data/spec/support/shared/session.rb +46 -5
  220. metadata +174 -116
  221. metadata.gz.sig +1 -2
  222. data/lib/mongo/operation/commands.rb +0 -31
  223. data/lib/mongo/operation/commands/aggregate.rb +0 -63
  224. data/lib/mongo/operation/commands/aggregate/result.rb +0 -89
  225. data/lib/mongo/operation/commands/collections_info.rb +0 -71
  226. data/lib/mongo/operation/commands/create.rb +0 -49
  227. data/lib/mongo/operation/commands/drop.rb +0 -49
  228. data/lib/mongo/operation/commands/drop_database.rb +0 -49
  229. data/lib/mongo/operation/commands/explain.rb +0 -27
  230. data/lib/mongo/operation/commands/explain/result.rb +0 -52
  231. data/lib/mongo/operation/commands/find/result.rb +0 -62
  232. data/lib/mongo/operation/commands/get_more.rb +0 -27
  233. data/lib/mongo/operation/commands/get_more/result.rb +0 -62
  234. data/lib/mongo/operation/commands/indexes.rb +0 -73
  235. data/lib/mongo/operation/commands/list_collections.rb +0 -48
  236. data/lib/mongo/operation/commands/list_collections/result.rb +0 -94
  237. data/lib/mongo/operation/commands/list_indexes.rb +0 -48
  238. data/lib/mongo/operation/commands/list_indexes/result.rb +0 -98
  239. data/lib/mongo/operation/commands/map_reduce.rb +0 -65
  240. data/lib/mongo/operation/commands/map_reduce/result.rb +0 -131
  241. data/lib/mongo/operation/commands/parallel_scan.rb +0 -54
  242. data/lib/mongo/operation/commands/parallel_scan/result.rb +0 -64
  243. data/lib/mongo/operation/commands/users_info.rb +0 -52
  244. data/lib/mongo/operation/read.rb +0 -16
  245. data/lib/mongo/operation/read/get_more.rb +0 -52
  246. data/lib/mongo/operation/read/query.rb +0 -55
  247. data/lib/mongo/operation/uses_command_op_msg.rb +0 -78
  248. data/lib/mongo/operation/write.rb +0 -22
  249. data/lib/mongo/operation/write/bulk.rb +0 -20
  250. data/lib/mongo/operation/write/bulk/bulkable.rb +0 -82
  251. data/lib/mongo/operation/write/bulk/delete.rb +0 -71
  252. data/lib/mongo/operation/write/bulk/delete/result.rb +0 -71
  253. data/lib/mongo/operation/write/bulk/insert.rb +0 -96
  254. data/lib/mongo/operation/write/bulk/insert/result.rb +0 -129
  255. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +0 -87
  256. data/lib/mongo/operation/write/bulk/mergable.rb +0 -73
  257. data/lib/mongo/operation/write/bulk/update.rb +0 -81
  258. data/lib/mongo/operation/write/bulk/update/result.rb +0 -196
  259. data/lib/mongo/operation/write/command.rb +0 -23
  260. data/lib/mongo/operation/write/command/create_index.rb +0 -79
  261. data/lib/mongo/operation/write/command/create_user.rb +0 -61
  262. data/lib/mongo/operation/write/command/delete.rb +0 -79
  263. data/lib/mongo/operation/write/command/drop_index.rb +0 -80
  264. data/lib/mongo/operation/write/command/insert.rb +0 -69
  265. data/lib/mongo/operation/write/command/remove_user.rb +0 -60
  266. data/lib/mongo/operation/write/command/update.rb +0 -77
  267. data/lib/mongo/operation/write/command/update_user.rb +0 -61
  268. data/lib/mongo/operation/write/command/writable.rb +0 -70
  269. data/lib/mongo/operation/write/delete.rb +0 -75
  270. data/lib/mongo/operation/write/gle.rb +0 -49
  271. data/lib/mongo/operation/write/idable.rb +0 -63
  272. data/lib/mongo/operation/write/insert.rb +0 -74
  273. data/lib/mongo/operation/write/insert/result.rb +0 -62
  274. data/lib/mongo/operation/write/update.rb +0 -91
  275. data/lib/mongo/operation/write/write_command_enabled.rb +0 -77
@@ -1,129 +0,0 @@
1
- # Copyright (C) 2014-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 Write
18
- module Bulk
19
- class Insert
20
-
21
- # Defines custom behaviour of results when inserting.
22
- #
23
- # @since 2.0.0
24
- class Result < Operation::Result
25
- include Mergable
26
-
27
- # Get the ids of the inserted documents.
28
- #
29
- # @since 2.0.0
30
- attr_reader :inserted_ids
31
-
32
- # Initialize a new result.
33
- #
34
- # @example Instantiate the result.
35
- # Result.new(replies, inserted_ids)
36
- #
37
- # @param [ Protocol::Message ] replies The wire protocol replies.
38
- # @param [ Array<Object> ] ids The ids of the inserted documents.
39
- #
40
- # @since 2.0.0
41
- def initialize(replies, ids)
42
- @replies = [ *replies ] if replies
43
- @inserted_ids = ids
44
- end
45
-
46
- # Gets the number of documents inserted.
47
- #
48
- # @example Get the number of documents inserted.
49
- # result.n_inserted
50
- #
51
- # @return [ Integer ] The number of documents inserted.
52
- #
53
- # @since 2.0.0
54
- def n_inserted
55
- written_count
56
- end
57
-
58
- # Gets the id of the document inserted.
59
- #
60
- # @example Get id of the document inserted.
61
- # result.inserted_id
62
- #
63
- # @return [ Object ] The id of the document inserted.
64
- #
65
- # @since 2.0.0
66
- def inserted_id
67
- inserted_ids.first
68
- end
69
- end
70
-
71
- # Defines custom behaviour of results when inserting.
72
- # For server versions < 2.5.5 (that don't use write commands).
73
- #
74
- # @since 2.0.0
75
- class LegacyResult < Operation::Result
76
- include LegacyMergable
77
-
78
- # Get the ids of the inserted documents.
79
- #
80
- # @since 2.0.0
81
- attr_reader :inserted_ids
82
-
83
- # Initialize a new result.
84
- #
85
- # @example Instantiate the result.
86
- # Result.new(replies, inserted_ids)
87
- #
88
- # @param [ Protocol::Message ] replies The wire protocol replies.
89
- # @param [ Array<Object> ] ids The ids of the inserted documents.
90
- #
91
- # @since 2.0.0
92
- def initialize(replies, ids)
93
- @replies = [ *replies ] if replies
94
- @inserted_ids = ids
95
- end
96
-
97
- # Gets the number of documents inserted.
98
- #
99
- # @example Get the number of documents inserted.
100
- # result.n_inserted
101
- #
102
- # @return [ Integer ] The number of documents inserted.
103
- #
104
- # @since 2.0.0
105
- def n_inserted
106
- return 0 unless acknowledged?
107
- @replies.reduce(0) do |n, reply|
108
- n += 1 unless reply_write_errors?(reply)
109
- n
110
- end
111
- end
112
-
113
- # Gets the id of the document inserted.
114
- #
115
- # @example Get id of the document inserted.
116
- # result.inserted_id
117
- #
118
- # @return [ Object ] The id of the document inserted.
119
- #
120
- # @since 2.0.0
121
- def inserted_id
122
- inserted_ids.first
123
- end
124
- end
125
- end
126
- end
127
- end
128
- end
129
- end
@@ -1,87 +0,0 @@
1
- # Copyright (C) 2014-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 Write
18
- module Bulk
19
-
20
- # This module contains common functionality for merging results from
21
- # writes during a bulk operation. Used for server versions < 2.6.
22
- #
23
- # @since 2.0.0
24
- module LegacyMergable
25
-
26
- # Aggregate the write errors returned from this result.
27
- #
28
- # @example Aggregate the write errors.
29
- # result.aggregate_write_errors(0)
30
- #
31
- # @param [ Integer ] count The number of documents already executed.
32
- #
33
- # @return [ Array ] The aggregate write errors.
34
- #
35
- # @since 2.0.0
36
- def aggregate_write_errors(count)
37
- @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
38
- if reply_write_errors?(reply)
39
- errors ||= []
40
- errors << { 'errmsg' => reply.documents.first[Error::ERROR],
41
- 'index' => count + i,
42
- 'code' => reply.documents.first[Error::CODE] }
43
- end
44
- errors
45
- end if @replies
46
- end
47
-
48
- # Aggregate the write concern errors returned from this result.
49
- #
50
- # @example Aggregate the write concern errors.
51
- # result.aggregate_write_concern_errors(4)
52
- #
53
- # @param [ Integer ] count The number of documents already executed.
54
- #
55
- # @return [ Array ] The aggregate write concern errors.
56
- #
57
- # @since 2.0.0
58
- def aggregate_write_concern_errors(count)
59
- @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
60
- if error = reply_write_errors?(reply)
61
- errors ||= []
62
- if note = reply.documents.first['wnote'] || reply.documents.first['jnote']
63
- code = reply.documents.first['code'] || Error::BAD_VALUE
64
- error_string = "#{code}: #{note}"
65
- elsif error == 'timeout'
66
- code = reply.documents.first['code'] || Error::UNKNOWN_ERROR
67
- error_string = "#{code}: #{error}"
68
- end
69
- errors << { 'errmsg' => error_string,
70
- 'index' => count + i,
71
- 'code' => code } if error_string
72
- end
73
- errors
74
- end if @replies
75
- end
76
-
77
- private
78
-
79
- def reply_write_errors?(reply)
80
- reply.documents.first[Error::ERROR] ||
81
- reply.documents.first[Error::ERRMSG]
82
- end
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,73 +0,0 @@
1
- # Copyright (C) 2014-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 Write
18
- module Bulk
19
-
20
- # This module contains common functionality for merging results from
21
- # write commands during a bulk operation. Used for server versions >= 2.6.
22
- #
23
- # @since 2.0.0
24
- module Mergable
25
-
26
- # Aggregate the write errors returned from this result.
27
- #
28
- # @example Aggregate the write errors.
29
- # result.aggregate_write_errors(0)
30
- #
31
- # @param [ Integer ] count The number of documents already executed.
32
- #
33
- # @return [ Array ] The aggregate write errors.
34
- #
35
- # @since 2.0.0
36
- def aggregate_write_errors(count)
37
- return unless @replies
38
- @replies.reduce(nil) do |errors, reply|
39
- if write_errors = reply.documents.first[Error::WRITE_ERRORS]
40
- wes = write_errors.collect do |we|
41
- we.merge!('index' => count + we['index'])
42
- end
43
- (errors || []) << wes if wes
44
- end
45
- end
46
- end
47
-
48
- # Aggregate the write concern errors returned from this result.
49
- #
50
- # @example Aggregate the write concern errors.
51
- # result.aggregate_write_concern_errors(100)
52
- #
53
- # @param [ Integer ] count The number of documents already executed.
54
- #
55
- # @return [ Array ] The aggregate write concern errors.
56
- #
57
- # @since 2.0.0
58
- def aggregate_write_concern_errors(count)
59
- return unless @replies
60
- @replies.each_with_index.reduce(nil) do |errors, (reply, _)|
61
- if write_concern_errors = reply.documents.first[Error::WRITE_CONCERN_ERRORS]
62
- (errors || []) << write_concern_errors.reduce(nil) do |errs, wce|
63
- wce.merge!('index' => count + wce['index'])
64
- (errs || []) << write_concern_error
65
- end
66
- end
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
73
- end
@@ -1,81 +0,0 @@
1
- # Copyright (C) 2014-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
- require 'mongo/operation/write/bulk/update/result'
16
-
17
- module Mongo
18
- module Operation
19
- module Write
20
- module Bulk
21
-
22
- # A MongoDB bulk update operation.
23
- #
24
- # @note If the server version is >= 2.5.5, a write command operation
25
- # will be created and sent instead.
26
- #
27
- # @example Create the update operation.
28
- # Write::BulkUpdate.new({
29
- # :updates => [
30
- # {
31
- # :q => { :foo => 1 },
32
- # :u => { :$set => { :bar => 1 }},
33
- # :multi => true,
34
- # :upsert => false
35
- # }
36
- # ],
37
- # :db_name => 'test',
38
- # :coll_name => 'test_coll',
39
- # :write_concern => write_concern,
40
- # :ordered => false
41
- # })
42
- #
43
- # Initialization:
44
- # param [ Hash ] spec The specifications for the update.
45
- #
46
- # option spec :updates [ Array ] The update documents.
47
- # option spec :db_name [ String ] The name of the database on which
48
- # the query should be run.
49
- # option spec :coll_name [ String ] The name of the collection on which
50
- # the query should be run.
51
- # option spec :write_concern [ Mongo::WriteConcern ] The write concern.
52
- # option spec :ordered [ true, false ] Whether the operations should be
53
- # executed in order.
54
- # option spec :options [ Hash ] Options for the command, if it ends up being a
55
- # write command.
56
- #
57
- # @since 2.0.0
58
- class Update
59
- include Bulkable
60
- include Specifiable
61
-
62
- private
63
-
64
- def execute_write_command(server)
65
- Result.new(Command::Update.new(spec).execute(server))
66
- end
67
-
68
-
69
- def messages
70
- updates.collect do |u|
71
- opts = { :flags => [] }
72
- opts[:flags] << :multi_update if !!u[Operation::MULTI]
73
- opts[:flags] << :upsert if !!u[Operation::UPSERT]
74
- Protocol::Update.new(db_name, coll_name, u[Operation::Q], u[Operation::U], opts)
75
- end
76
- end
77
- end
78
- end
79
- end
80
- end
81
- end
@@ -1,196 +0,0 @@
1
- # Copyright (C) 2014-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 Write
18
- module Bulk
19
- class Update
20
-
21
- # Defines custom behaviour of results when updating.
22
- #
23
- # @since 2.0.0
24
- class Result < Operation::Result
25
- include Mergable
26
-
27
- # The number of modified docs field in the result.
28
- #
29
- # @since 2.0.0
30
- MODIFIED = 'nModified'.freeze
31
-
32
- # The upserted docs field in the result.
33
- #
34
- # @since 2.0.0
35
- UPSERTED = 'upserted'.freeze
36
-
37
- # Gets the number of documents upserted.
38
- #
39
- # @example Get the upserted count.
40
- # result.n_upserted
41
- #
42
- # @return [ Integer ] The number of documents upserted.
43
- #
44
- # @since 2.0.0
45
- def n_upserted
46
- return 0 unless acknowledged?
47
- @replies.reduce(0) do |n, reply|
48
- if upsert?(reply)
49
- n += reply.documents.first[UPSERTED].size
50
- else
51
- n
52
- end
53
- end
54
- end
55
-
56
- # Gets the number of documents matched.
57
- #
58
- # @example Get the matched count.
59
- # result.n_matched
60
- #
61
- # @return [ Integer ] The number of documents matched.
62
- #
63
- # @since 2.0.0
64
- def n_matched
65
- return 0 unless acknowledged?
66
- @replies.reduce(0) do |n, reply|
67
- if upsert?(reply)
68
- reply.documents.first[N] - n_upserted
69
- else
70
- if reply.documents.first[N]
71
- n += reply.documents.first[N]
72
- else
73
- n
74
- end
75
- end
76
- end
77
- end
78
-
79
- # Gets the number of documents modified.
80
- # Not that in a mixed sharded cluster a call to
81
- # update could return nModified (>= 2.6) or not (<= 2.4).
82
- # If any call does not return nModified we can't report
83
- # a valid final count so set the field to nil.
84
- #
85
- # @example Get the modified count.
86
- # result.n_modified
87
- #
88
- # @return [ Integer ] The number of documents modified.
89
- #
90
- # @since 2.0.0
91
- def n_modified
92
- return 0 unless acknowledged?
93
- @replies.reduce(0) do |n, reply|
94
- if n && reply.documents.first[MODIFIED]
95
- n += reply.documents.first[MODIFIED]
96
- else
97
- nil
98
- end
99
- end
100
- end
101
-
102
- # Get the upserted documents.
103
- #
104
- # @example Get upserted documents.
105
- # result.upserted
106
- #
107
- # @return [ Array<BSON::Document> ] The upserted document info
108
- #
109
- # @since 2.1.0
110
- def upserted
111
- reply.documents.first[UPSERTED] || []
112
- end
113
-
114
- private
115
-
116
- def upsert?(reply)
117
- upserted.any?
118
- end
119
- end
120
-
121
- # Defines custom behaviour of results when updating.
122
- # For server versions < 2.5.5 (that don't use write commands).
123
- #
124
- # @since 2.0.0
125
- class LegacyResult < Operation::Result
126
- include LegacyMergable
127
-
128
- # The updated existing field in the result.
129
- #
130
- # @since 2.0.0
131
- UPDATED_EXISTING = 'updatedExisting'.freeze
132
-
133
- # Gets the number of documents upserted.
134
- #
135
- # @example Get the upserted count.
136
- # result.n_upserted
137
- #
138
- # @return [ Integer ] The number of documents upserted.
139
- #
140
- # @since 2.0.0
141
- def n_upserted
142
- return 0 unless acknowledged?
143
- @replies.reduce(0) do |n, reply|
144
- if upsert?(reply)
145
- n += reply.documents.first[N]
146
- else
147
- n
148
- end
149
- end
150
- end
151
-
152
- # Gets the number of documents matched.
153
- #
154
- # @example Get the matched count.
155
- # result.n_matched
156
- #
157
- # @return [ Integer ] The number of documents matched.
158
- #
159
- # @since 2.0.0
160
- def n_matched
161
- return 0 unless acknowledged?
162
- @replies.reduce(0) do |n, reply|
163
- if upsert?(reply)
164
- n
165
- else
166
- n += reply.documents.first[N]
167
- end
168
- end
169
- end
170
-
171
- # Gets the number of documents modified.
172
- #
173
- # @example Get the modified count.
174
- # result.n_modified
175
- #
176
- # @return [ Integer ] The number of documents modified.
177
- #
178
- # @since 2.2.3
179
- def n_modified; end
180
-
181
- private
182
-
183
- def upsert?(reply)
184
- reply.documents.first[BulkWrite::Result::UPSERTED] ||
185
- (!updated_existing?(reply) && reply.documents.first[N] == 1)
186
- end
187
-
188
- def updated_existing?(reply)
189
- reply.documents.first[UPDATED_EXISTING]
190
- end
191
- end
192
- end
193
- end
194
- end
195
- end
196
- end