mongo 2.9.2 → 2.10.0.rc0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/mongo.rb +1 -0
- data/lib/mongo/auth/user/view.rb +4 -4
- data/lib/mongo/bulk_write.rb +14 -8
- data/lib/mongo/bulk_write/result.rb +1 -1
- data/lib/mongo/bulk_write/result_combiner.rb +2 -2
- data/lib/mongo/bulk_write/transformable.rb +17 -9
- data/lib/mongo/client.rb +107 -16
- data/lib/mongo/cluster.rb +47 -25
- data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
- data/lib/mongo/cluster_time.rb +139 -0
- data/lib/mongo/collection.rb +84 -25
- data/lib/mongo/collection/view.rb +7 -3
- data/lib/mongo/collection/view/aggregation.rb +4 -4
- data/lib/mongo/collection/view/builder/aggregation.rb +31 -6
- data/lib/mongo/collection/view/builder/find_command.rb +4 -1
- data/lib/mongo/collection/view/builder/map_reduce.rb +4 -1
- data/lib/mongo/collection/view/change_stream.rb +54 -66
- data/lib/mongo/collection/view/iterable.rb +2 -2
- data/lib/mongo/collection/view/map_reduce.rb +6 -4
- data/lib/mongo/collection/view/readable.rb +36 -16
- data/lib/mongo/collection/view/writable.rb +68 -22
- data/lib/mongo/cursor.rb +87 -20
- data/lib/mongo/database.rb +47 -43
- data/lib/mongo/database/view.rb +54 -11
- data/lib/mongo/error.rb +13 -4
- data/lib/mongo/error/invalid_write_concern.rb +2 -2
- data/lib/mongo/error/operation_failure.rb +65 -11
- data/lib/mongo/error/parser.rb +41 -8
- data/lib/mongo/grid/fs_bucket.rb +26 -6
- data/lib/mongo/grid/stream/read.rb +9 -2
- data/lib/mongo/grid/stream/write.rb +21 -5
- data/lib/mongo/index/view.rb +3 -3
- data/lib/mongo/lint.rb +10 -3
- data/lib/mongo/operation.rb +2 -0
- data/lib/mongo/operation/aggregate/result.rb +19 -6
- data/lib/mongo/operation/collections_info.rb +1 -1
- data/lib/mongo/operation/get_more/result.rb +9 -0
- data/lib/mongo/operation/list_collections/command.rb +1 -3
- data/lib/mongo/operation/list_collections/op_msg.rb +1 -2
- data/lib/mongo/operation/parallel_scan/command.rb +4 -1
- data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -1
- data/lib/mongo/operation/result.rb +27 -4
- data/lib/mongo/operation/shared/executable.rb +19 -5
- data/lib/mongo/operation/shared/executable_no_validate.rb +1 -2
- data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -9
- data/lib/mongo/operation/shared/polymorphic_result.rb +9 -1
- data/lib/mongo/operation/shared/result/aggregatable.rb +2 -2
- data/lib/mongo/operation/shared/sessions_supported.rb +42 -32
- data/lib/mongo/operation/shared/specifiable.rb +40 -0
- data/lib/mongo/operation/shared/unpinnable.rb +39 -0
- data/lib/mongo/operation/shared/write.rb +1 -1
- data/lib/mongo/protocol/update.rb +6 -2
- data/lib/mongo/retryable.rb +79 -39
- data/lib/mongo/server/connection.rb +10 -3
- data/lib/mongo/server/description.rb +25 -1
- data/lib/mongo/server/monitor/connection.rb +1 -1
- data/lib/mongo/server_selector.rb +10 -0
- data/lib/mongo/server_selector/selectable.rb +172 -32
- data/lib/mongo/session.rb +654 -581
- data/lib/mongo/session/session_pool.rb +1 -1
- data/lib/mongo/socket.rb +7 -28
- data/lib/mongo/socket/ssl.rb +26 -1
- data/lib/mongo/socket/tcp.rb +3 -0
- data/lib/mongo/socket/unix.rb +3 -0
- data/lib/mongo/uri.rb +112 -265
- data/lib/mongo/uri/srv_protocol.rb +4 -1
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern.rb +10 -29
- data/lib/mongo/write_concern/acknowledged.rb +12 -0
- data/lib/mongo/write_concern/base.rb +17 -13
- data/lib/mongo/write_concern/unacknowledged.rb +12 -0
- data/spec/atlas/atlas_connectivity_spec.rb +7 -37
- data/spec/atlas/operations_spec.rb +25 -0
- data/spec/integration/change_stream_examples_spec.rb +45 -31
- data/spec/integration/change_stream_spec.rb +305 -5
- data/spec/integration/client_spec.rb +44 -0
- data/spec/integration/command_monitoring_spec.rb +1 -0
- data/spec/integration/command_spec.rb +7 -1
- data/spec/integration/mmapv1_spec.rb +28 -0
- data/spec/integration/mongos_pinning_spec.rb +34 -0
- data/spec/integration/operation_failure_code_spec.rb +2 -2
- data/spec/integration/{read_concern.rb → read_concern_spec.rb} +7 -1
- data/spec/integration/read_preference_spec.rb +485 -0
- data/spec/integration/retryable_writes_spec.rb +8 -19
- data/spec/integration/sdam_error_handling_spec.rb +1 -1
- data/spec/integration/sdam_events_spec.rb +2 -2
- data/spec/integration/server_description_spec.rb +14 -17
- data/spec/integration/server_selector_spec.rb +7 -3
- data/spec/integration/server_spec.rb +48 -0
- data/spec/integration/ssl_uri_options_spec.rb +1 -1
- data/spec/integration/step_down_spec.rb +10 -4
- data/spec/integration/transactions_examples_spec.rb +11 -10
- data/spec/lite_spec_helper.rb +19 -16
- data/spec/mongo/auth/scram/negotiation_spec.rb +11 -8
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +6 -6
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +4 -4
- data/spec/mongo/bulk_write_spec.rb +12 -2
- data/spec/mongo/client_construction_spec.rb +160 -8
- data/spec/mongo/client_spec.rb +5 -4
- data/spec/mongo/cluster_spec.rb +6 -6
- data/spec/mongo/cluster_time_spec.rb +148 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +34 -15
- data/spec/mongo/collection/view/change_stream_spec.rb +62 -3
- data/spec/mongo/collection/view/map_reduce_spec.rb +7 -5
- data/spec/mongo/collection/view/readable_spec.rb +4 -4
- data/spec/mongo/collection_spec.rb +331 -14
- data/spec/mongo/cursor_spec.rb +117 -5
- data/spec/mongo/database_spec.rb +240 -8
- data/spec/mongo/error/operation_failure_spec.rb +47 -1
- data/spec/mongo/error/parser_spec.rb +160 -23
- data/spec/mongo/operation/insert/bulk_spec.rb +2 -1
- data/spec/mongo/operation/result_spec.rb +27 -0
- data/spec/mongo/operation/update/bulk_spec.rb +1 -0
- data/spec/mongo/retryable_spec.rb +2 -0
- data/spec/mongo/server/app_metadata_spec.rb +2 -2
- data/spec/mongo/server/connection_spec.rb +13 -17
- data/spec/mongo/server/monitor/connection_spec.rb +13 -10
- data/spec/mongo/server_selector_spec.rb +34 -2
- data/spec/mongo/session/session_pool_spec.rb +14 -3
- data/spec/mongo/session_spec.rb +3 -3
- data/spec/mongo/session_transaction_spec.rb +4 -3
- data/spec/mongo/socket/ssl_spec.rb +19 -5
- data/spec/mongo/socket_spec.rb +1 -62
- data/spec/mongo/uri/srv_protocol_spec.rb +14 -20
- data/spec/mongo/uri_option_parsing_spec.rb +94 -8
- data/spec/mongo/uri_spec.rb +23 -10
- data/spec/mongo/write_concern_spec.rb +56 -3
- data/spec/spec_tests/change_streams_spec.rb +2 -1
- data/spec/spec_tests/cmap_spec.rb +1 -1
- data/spec/spec_tests/crud_spec.rb +12 -2
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +24 -1
- data/spec/spec_tests/data/change_streams/change-streams.yml +172 -3
- data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +1 -1
- data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -2
- data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -5
- data/spec/spec_tests/data/crud/read/aggregate-out.yml +0 -6
- data/spec/spec_tests/data/crud/read/count-empty.yml +29 -0
- data/spec/spec_tests/data/crud/write/bulkWrite-arrayFilters.yml +1 -0
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +101 -0
- data/spec/spec_tests/data/crud/write/bulkWrite.yml +401 -0
- data/spec/spec_tests/data/crud/write/insertMany.yml +58 -2
- data/spec/spec_tests/data/crud/write/updateMany-arrayFilters.yml +3 -0
- data/spec/spec_tests/data/crud/write/updateOne-arrayFilters.yml +6 -1
- data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +103 -0
- data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +110 -0
- data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +81 -0
- data/spec/spec_tests/data/crud_v2/db-aggregate.yml +38 -0
- data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +92 -0
- data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +2 -2
- data/spec/spec_tests/data/transactions/abort.yml +3 -0
- data/spec/spec_tests/data/transactions/bulk.yml +3 -8
- data/spec/spec_tests/data/transactions/causal-consistency.yml +3 -8
- data/spec/spec_tests/data/transactions/commit.yml +3 -1
- data/spec/spec_tests/data/transactions/count.yml +3 -0
- data/spec/spec_tests/data/transactions/delete.yml +3 -0
- data/spec/spec_tests/data/transactions/error-labels.yml +4 -1
- data/spec/spec_tests/data/transactions/errors-client.yml +56 -0
- data/spec/spec_tests/data/transactions/errors.yml +3 -0
- data/spec/spec_tests/data/transactions/findOneAndDelete.yml +3 -0
- data/spec/spec_tests/data/transactions/findOneAndReplace.yml +3 -0
- data/spec/spec_tests/data/transactions/findOneAndUpdate.yml +3 -0
- data/spec/spec_tests/data/transactions/insert.yml +3 -0
- data/spec/spec_tests/data/transactions/isolation.yml +3 -0
- data/spec/spec_tests/data/transactions/mongos-pin-auto.yml +1671 -0
- data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +347 -0
- data/spec/spec_tests/data/transactions/pin-mongos.yml +557 -0
- data/spec/spec_tests/data/transactions/read-concern.yml +3 -0
- data/spec/spec_tests/data/transactions/read-pref.yml +3 -0
- data/spec/spec_tests/data/transactions/reads.yml +3 -0
- data/spec/spec_tests/data/transactions/retryable-abort.yml +5 -2
- data/spec/spec_tests/data/transactions/retryable-commit.yml +4 -1
- data/spec/spec_tests/data/transactions/retryable-writes.yml +3 -0
- data/spec/spec_tests/data/transactions/run-command.yml +3 -0
- data/spec/spec_tests/data/transactions/transaction-options.yml +6 -0
- data/spec/spec_tests/data/transactions/update.yml +3 -8
- data/spec/spec_tests/data/transactions/write-concern.yml +348 -38
- data/spec/spec_tests/data/transactions_api/callback-aborts.yml +6 -0
- data/spec/spec_tests/data/transactions_api/callback-commits.yml +5 -0
- data/spec/spec_tests/data/transactions_api/callback-retry.yml +7 -2
- data/spec/spec_tests/data/transactions_api/commit-retry.yml +70 -15
- data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +3 -0
- data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +3 -0
- data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +59 -109
- data/spec/spec_tests/data/transactions_api/commit.yml +5 -0
- data/spec/spec_tests/data/transactions_api/transaction-options.yml +10 -0
- data/spec/spec_tests/retryable_reads_spec.rb +5 -2
- data/spec/spec_tests/retryable_writes_spec.rb +5 -2
- data/spec/spec_tests/sdam_monitoring_spec.rb +3 -3
- data/spec/spec_tests/sdam_spec.rb +2 -2
- data/spec/spec_tests/transactions_api_spec.rb +1 -67
- data/spec/spec_tests/transactions_spec.rb +2 -66
- data/spec/support/authorization.rb +4 -0
- data/spec/support/change_streams.rb +30 -10
- data/spec/support/change_streams/operation.rb +27 -0
- data/spec/support/client_registry.rb +44 -25
- data/spec/support/cluster_config.rb +25 -14
- data/spec/support/cluster_tools.rb +32 -10
- data/spec/support/command_monitoring.rb +1 -1
- data/spec/support/common_shortcuts.rb +30 -0
- data/spec/support/connection_string.rb +8 -3
- data/spec/support/constraints.rb +34 -0
- data/spec/support/crud.rb +31 -16
- data/spec/support/crud/context.rb +23 -0
- data/spec/support/crud/operation.rb +311 -14
- data/spec/support/crud/spec.rb +2 -1
- data/spec/support/crud/test.rb +24 -27
- data/spec/support/crud/test_base.rb +22 -0
- data/spec/support/crud/verifier.rb +15 -1
- data/spec/support/event_subscriber.rb +12 -0
- data/spec/support/sdam_formatter_integration.rb +12 -6
- data/spec/support/shared/server_selector.rb +10 -0
- data/spec/support/shared/session.rb +13 -12
- data/spec/support/spec_config.rb +32 -22
- data/spec/support/spec_setup.rb +2 -2
- data/spec/support/transactions.rb +87 -0
- data/spec/support/transactions/context.rb +33 -0
- data/spec/support/transactions/operation.rb +99 -349
- data/spec/support/transactions/spec.rb +1 -3
- data/spec/support/transactions/test.rb +110 -49
- data/spec/support/utils.rb +74 -1
- metadata +52 -10
- metadata.gz.sig +0 -0
- data/spec/support/crud/read.rb +0 -265
- data/spec/support/crud/write.rb +0 -284
@@ -27,7 +27,6 @@ tests:
|
|
27
27
|
q: { _id: { $gt: 1 }}
|
28
28
|
u: { $inc: { x: 1 }}
|
29
29
|
multi: true
|
30
|
-
upsert: false
|
31
30
|
command_name: "update"
|
32
31
|
database_name: *database_name
|
33
32
|
-
|
@@ -54,7 +53,6 @@ tests:
|
|
54
53
|
q: { _id: { $gt: 1 }}
|
55
54
|
u: { $nothing: { x: 1 }}
|
56
55
|
multi: true
|
57
|
-
upsert: false
|
58
56
|
command_name: "update"
|
59
57
|
database_name: *database_name
|
60
58
|
-
|
@@ -26,8 +26,6 @@ tests:
|
|
26
26
|
-
|
27
27
|
q: { _id: { $gt: 1 }}
|
28
28
|
u: { $inc: { x: 1 }}
|
29
|
-
multi: false
|
30
|
-
upsert: false
|
31
29
|
command_name: "update"
|
32
30
|
database_name: *database_name
|
33
31
|
-
|
@@ -54,7 +52,6 @@ tests:
|
|
54
52
|
-
|
55
53
|
q: { _id: 4 }
|
56
54
|
u: { $inc: { x: 1 } }
|
57
|
-
multi: false
|
58
55
|
upsert: true
|
59
56
|
command_name: "update"
|
60
57
|
database_name: *database_name
|
@@ -81,8 +78,6 @@ tests:
|
|
81
78
|
-
|
82
79
|
q: { _id: { $gt: 1 }}
|
83
80
|
u: { $nothing: { x: 1 }}
|
84
|
-
multi: false
|
85
|
-
upsert: false
|
86
81
|
command_name: "update"
|
87
82
|
database_name: *database_name
|
88
83
|
-
|
@@ -18,9 +18,6 @@ tests:
|
|
18
18
|
batchSize: 2
|
19
19
|
|
20
20
|
outcome:
|
21
|
-
# Some drivers apparently return a cursor to the output collection.
|
22
|
-
# Ruby driver does not, hence result is empty.
|
23
|
-
result: []
|
24
21
|
collection:
|
25
22
|
name: "other_test_collection"
|
26
23
|
data:
|
@@ -39,9 +36,6 @@ tests:
|
|
39
36
|
batchSize: 0
|
40
37
|
|
41
38
|
outcome:
|
42
|
-
# Some drivers apparently return a cursor to the output collection.
|
43
|
-
# Ruby driver does not, hence result is empty.
|
44
|
-
result: []
|
45
39
|
collection:
|
46
40
|
name: "other_test_collection"
|
47
41
|
data:
|
@@ -0,0 +1,29 @@
|
|
1
|
+
data: []
|
2
|
+
|
3
|
+
tests:
|
4
|
+
-
|
5
|
+
description: "Estimated document count with empty collection"
|
6
|
+
operation:
|
7
|
+
name: estimatedDocumentCount
|
8
|
+
arguments: { }
|
9
|
+
|
10
|
+
outcome:
|
11
|
+
result: 0
|
12
|
+
-
|
13
|
+
description: "Count documents with empty collection"
|
14
|
+
operation:
|
15
|
+
name: countDocuments
|
16
|
+
arguments:
|
17
|
+
filter: { }
|
18
|
+
|
19
|
+
outcome:
|
20
|
+
result: 0
|
21
|
+
-
|
22
|
+
description: "Deprecated count with empty collection"
|
23
|
+
operation:
|
24
|
+
name: count
|
25
|
+
arguments:
|
26
|
+
filter: { }
|
27
|
+
|
28
|
+
outcome:
|
29
|
+
result: 0
|
@@ -0,0 +1,101 @@
|
|
1
|
+
data:
|
2
|
+
- {_id: 1, x: 11}
|
3
|
+
- {_id: 2, x: 'ping'}
|
4
|
+
- {_id: 3, x: 'pINg'}
|
5
|
+
- {_id: 4, x: 'pong'}
|
6
|
+
- {_id: 5, x: 'pONg'}
|
7
|
+
|
8
|
+
minServerVersion: '3.4'
|
9
|
+
|
10
|
+
# See: https://docs.mongodb.com/master/reference/collation/#collation-document
|
11
|
+
tests:
|
12
|
+
-
|
13
|
+
description: "BulkWrite with delete operations and collation"
|
14
|
+
operation:
|
15
|
+
name: "bulkWrite"
|
16
|
+
arguments:
|
17
|
+
requests:
|
18
|
+
-
|
19
|
+
# matches two documents but deletes one
|
20
|
+
name: "deleteOne"
|
21
|
+
arguments:
|
22
|
+
filter: { x: "PING" }
|
23
|
+
collation: { locale: "en_US", strength: 2 }
|
24
|
+
-
|
25
|
+
# matches the remaining document and deletes it
|
26
|
+
name: "deleteOne"
|
27
|
+
arguments:
|
28
|
+
filter: { x: "PING" }
|
29
|
+
collation: { locale: "en_US", strength: 2 }
|
30
|
+
-
|
31
|
+
# matches two documents and deletes them
|
32
|
+
name: "deleteMany"
|
33
|
+
arguments:
|
34
|
+
filter: { x: "PONG" }
|
35
|
+
collation: { locale: "en_US", strength: 2 }
|
36
|
+
options: { ordered: true }
|
37
|
+
outcome:
|
38
|
+
result:
|
39
|
+
deletedCount: 4
|
40
|
+
insertedCount: 0
|
41
|
+
insertedIds: {}
|
42
|
+
matchedCount: 0
|
43
|
+
modifiedCount: 0
|
44
|
+
upsertedCount: 0
|
45
|
+
upsertedIds: {}
|
46
|
+
collection:
|
47
|
+
data:
|
48
|
+
- {_id: 1, x: 11 }
|
49
|
+
-
|
50
|
+
description: "BulkWrite with update operations and collation"
|
51
|
+
operation:
|
52
|
+
name: "bulkWrite"
|
53
|
+
arguments:
|
54
|
+
requests:
|
55
|
+
-
|
56
|
+
# matches only one document due to strength and updates
|
57
|
+
name: "updateMany"
|
58
|
+
arguments:
|
59
|
+
filter: { x: "ping" }
|
60
|
+
update: { $set: { x: "PONG" } }
|
61
|
+
collation: { locale: "en_US", strength: 3 }
|
62
|
+
-
|
63
|
+
# matches one document and updates
|
64
|
+
name: "updateOne"
|
65
|
+
arguments:
|
66
|
+
filter: { x: "ping" }
|
67
|
+
update: { $set: { x: "PONG" } }
|
68
|
+
collation: { locale: "en_US", strength: 2 }
|
69
|
+
-
|
70
|
+
# matches no document due to strength and upserts
|
71
|
+
name: "replaceOne"
|
72
|
+
arguments:
|
73
|
+
filter: { x: "ping" }
|
74
|
+
replacement: { _id: 6, x: "ping" }
|
75
|
+
upsert: true
|
76
|
+
collation: { locale: "en_US", strength: 3 }
|
77
|
+
-
|
78
|
+
# matches two documents and updates
|
79
|
+
name: "updateMany"
|
80
|
+
arguments:
|
81
|
+
filter: { x: "pong" }
|
82
|
+
update: { $set: { x: "PONG" } }
|
83
|
+
collation: { locale: "en_US", strength: 2 }
|
84
|
+
options: { ordered: true }
|
85
|
+
outcome:
|
86
|
+
result:
|
87
|
+
deletedCount: 0
|
88
|
+
insertedCount: 0
|
89
|
+
insertedIds: {}
|
90
|
+
matchedCount: 6
|
91
|
+
modifiedCount: 4
|
92
|
+
upsertedCount: 1
|
93
|
+
upsertedIds: { 2: 6 }
|
94
|
+
collection:
|
95
|
+
data:
|
96
|
+
- {_id: 1, x: 11 }
|
97
|
+
- {_id: 2, x: "PONG" }
|
98
|
+
- {_id: 3, x: "PONG" }
|
99
|
+
- {_id: 4, x: "PONG" }
|
100
|
+
- {_id: 5, x: "PONG" }
|
101
|
+
- {_id: 6, x: "ping" }
|
@@ -0,0 +1,401 @@
|
|
1
|
+
data:
|
2
|
+
- {_id: 1, x: 11}
|
3
|
+
- {_id: 2, x: 22}
|
4
|
+
|
5
|
+
minServerVersion: '2.6'
|
6
|
+
|
7
|
+
tests:
|
8
|
+
-
|
9
|
+
description: "BulkWrite with deleteOne operations"
|
10
|
+
operation:
|
11
|
+
name: "bulkWrite"
|
12
|
+
arguments:
|
13
|
+
# Note: as in the "DeleteOne when many documents match" test in
|
14
|
+
# deleteOne.yml, we omit a deleteOne operation that might match
|
15
|
+
# multiple documents as that would hinder our ability to assert
|
16
|
+
# the final state of the collection under test.
|
17
|
+
requests:
|
18
|
+
-
|
19
|
+
# does not match an existing document
|
20
|
+
name: "deleteOne"
|
21
|
+
arguments:
|
22
|
+
filter: { _id: 3 }
|
23
|
+
-
|
24
|
+
# deletes the matched document
|
25
|
+
name: "deleteOne"
|
26
|
+
arguments:
|
27
|
+
filter: { _id: 2 }
|
28
|
+
options: { ordered: true }
|
29
|
+
outcome:
|
30
|
+
result:
|
31
|
+
deletedCount: 1
|
32
|
+
insertedCount: 0
|
33
|
+
insertedIds: {}
|
34
|
+
matchedCount: 0
|
35
|
+
modifiedCount: 0
|
36
|
+
upsertedCount: 0
|
37
|
+
upsertedIds: {}
|
38
|
+
collection:
|
39
|
+
data:
|
40
|
+
- {_id: 1, x: 11 }
|
41
|
+
-
|
42
|
+
description: "BulkWrite with deleteMany operations"
|
43
|
+
operation:
|
44
|
+
name: "bulkWrite"
|
45
|
+
arguments:
|
46
|
+
requests:
|
47
|
+
-
|
48
|
+
# does not match any existing documents
|
49
|
+
name: "deleteMany"
|
50
|
+
arguments:
|
51
|
+
filter: { x: { $lt: 11 } }
|
52
|
+
-
|
53
|
+
# deletes the matched documents
|
54
|
+
name: "deleteMany"
|
55
|
+
arguments:
|
56
|
+
filter: { x: { $lte: 22 } }
|
57
|
+
options: { ordered: true }
|
58
|
+
outcome:
|
59
|
+
result:
|
60
|
+
deletedCount: 2
|
61
|
+
insertedCount: 0
|
62
|
+
insertedIds: {}
|
63
|
+
matchedCount: 0
|
64
|
+
modifiedCount: 0
|
65
|
+
upsertedCount: 0
|
66
|
+
upsertedIds: {}
|
67
|
+
collection:
|
68
|
+
data: []
|
69
|
+
-
|
70
|
+
description: "BulkWrite with insertOne operations"
|
71
|
+
operation:
|
72
|
+
name: "bulkWrite"
|
73
|
+
arguments:
|
74
|
+
requests:
|
75
|
+
-
|
76
|
+
name: "insertOne"
|
77
|
+
arguments:
|
78
|
+
document: { _id: 3, x: 33 }
|
79
|
+
-
|
80
|
+
name: "insertOne"
|
81
|
+
arguments:
|
82
|
+
document: { _id: 4, x: 44 }
|
83
|
+
options: { ordered: true }
|
84
|
+
outcome:
|
85
|
+
result:
|
86
|
+
deletedCount: 0
|
87
|
+
insertedCount: 2
|
88
|
+
insertedIds: { 0: 3, 1: 4 }
|
89
|
+
matchedCount: 0
|
90
|
+
modifiedCount: 0
|
91
|
+
upsertedCount: 0
|
92
|
+
upsertedIds: {}
|
93
|
+
collection:
|
94
|
+
data:
|
95
|
+
- {_id: 1, x: 11 }
|
96
|
+
- {_id: 2, x: 22 }
|
97
|
+
- {_id: 3, x: 33 }
|
98
|
+
- {_id: 4, x: 44 }
|
99
|
+
-
|
100
|
+
description: "BulkWrite with replaceOne operations"
|
101
|
+
operation:
|
102
|
+
name: "bulkWrite"
|
103
|
+
arguments:
|
104
|
+
# Note: as in the "ReplaceOne when many documents match" test in
|
105
|
+
# replaceOne.yml, we omit a replaceOne operation that might
|
106
|
+
# match multiple documents as that would hinder our ability to
|
107
|
+
# assert the final state of the collection under test.
|
108
|
+
requests:
|
109
|
+
-
|
110
|
+
# does not match an existing document
|
111
|
+
name: "replaceOne"
|
112
|
+
arguments:
|
113
|
+
filter: { _id: 3 }
|
114
|
+
replacement: { x: 33 }
|
115
|
+
-
|
116
|
+
# modifies the matched document
|
117
|
+
name: "replaceOne"
|
118
|
+
arguments:
|
119
|
+
filter: { _id: 1 }
|
120
|
+
replacement: { x: 12 }
|
121
|
+
-
|
122
|
+
# does not match an existing document and upserts
|
123
|
+
name: "replaceOne"
|
124
|
+
arguments:
|
125
|
+
filter: { _id: 3 }
|
126
|
+
replacement: { x: 33 }
|
127
|
+
upsert: true
|
128
|
+
options: { ordered: true }
|
129
|
+
outcome:
|
130
|
+
result:
|
131
|
+
deletedCount: 0
|
132
|
+
insertedCount: 0
|
133
|
+
insertedIds: {}
|
134
|
+
matchedCount: 1
|
135
|
+
modifiedCount: 1
|
136
|
+
upsertedCount: 1
|
137
|
+
upsertedIds: { 2: 3 }
|
138
|
+
collection:
|
139
|
+
data:
|
140
|
+
- {_id: 1, x: 12 }
|
141
|
+
- {_id: 2, x: 22 }
|
142
|
+
- {_id: 3, x: 33 }
|
143
|
+
-
|
144
|
+
description: "BulkWrite with updateOne operations"
|
145
|
+
operation:
|
146
|
+
name: "bulkWrite"
|
147
|
+
arguments:
|
148
|
+
# Note: as in the "UpdateOne when many documents match" test in
|
149
|
+
# updateOne.yml, we omit an updateOne operation that might match
|
150
|
+
# multiple documents as that would hinder our ability to assert
|
151
|
+
# the final state of the collection under test.
|
152
|
+
requests:
|
153
|
+
-
|
154
|
+
# does not match an existing document
|
155
|
+
name: "updateOne"
|
156
|
+
arguments:
|
157
|
+
filter: { _id: 0 }
|
158
|
+
update: { $set: { x: 0 } }
|
159
|
+
-
|
160
|
+
# does not modify the matched document
|
161
|
+
name: "updateOne"
|
162
|
+
arguments:
|
163
|
+
filter: { _id: 1 }
|
164
|
+
update: { $set: { x: 11 } }
|
165
|
+
-
|
166
|
+
# modifies the matched document
|
167
|
+
name: "updateOne"
|
168
|
+
arguments:
|
169
|
+
filter: { _id: 2 }
|
170
|
+
update: { $inc: { x: 1 } }
|
171
|
+
-
|
172
|
+
# does not match an existing document and upserts
|
173
|
+
name: "updateOne"
|
174
|
+
arguments:
|
175
|
+
filter: { _id: 3 }
|
176
|
+
update: { $set: { x: 33 } }
|
177
|
+
upsert: true
|
178
|
+
options: { ordered: true }
|
179
|
+
outcome:
|
180
|
+
result:
|
181
|
+
deletedCount: 0
|
182
|
+
insertedCount: 0
|
183
|
+
insertedIds: {}
|
184
|
+
matchedCount: 2
|
185
|
+
modifiedCount: 1
|
186
|
+
upsertedCount: 1
|
187
|
+
upsertedIds: { 3: 3 }
|
188
|
+
collection:
|
189
|
+
data:
|
190
|
+
- {_id: 1, x: 11 }
|
191
|
+
- {_id: 2, x: 23 }
|
192
|
+
- {_id: 3, x: 33 }
|
193
|
+
-
|
194
|
+
description: "BulkWrite with updateMany operations"
|
195
|
+
operation:
|
196
|
+
name: "bulkWrite"
|
197
|
+
arguments:
|
198
|
+
requests:
|
199
|
+
-
|
200
|
+
# does not match any existing documents
|
201
|
+
name: "updateMany"
|
202
|
+
arguments:
|
203
|
+
filter: { x: { $lt: 11 } }
|
204
|
+
update: { $set: { x: 0 } }
|
205
|
+
-
|
206
|
+
# does not modify the matched documents
|
207
|
+
name: "updateMany"
|
208
|
+
arguments:
|
209
|
+
filter: { x: { $lte: 22 } }
|
210
|
+
update: { $unset: { y: 1 } }
|
211
|
+
-
|
212
|
+
# modifies the matched documents
|
213
|
+
name: "updateMany"
|
214
|
+
arguments:
|
215
|
+
filter: { x: { $lte: 22 } }
|
216
|
+
update: { $inc: { x: 1 } }
|
217
|
+
-
|
218
|
+
# does not match any existing documents and upserts
|
219
|
+
name: "updateMany"
|
220
|
+
arguments:
|
221
|
+
filter: { _id: 3 }
|
222
|
+
update: { $set: { x: 33 } }
|
223
|
+
upsert: true
|
224
|
+
options: { ordered: true }
|
225
|
+
outcome:
|
226
|
+
result:
|
227
|
+
deletedCount: 0
|
228
|
+
insertedCount: 0
|
229
|
+
insertedIds: {}
|
230
|
+
matchedCount: 4
|
231
|
+
modifiedCount: 2
|
232
|
+
upsertedCount: 1
|
233
|
+
upsertedIds: { 3: 3 }
|
234
|
+
collection:
|
235
|
+
data:
|
236
|
+
- {_id: 1, x: 12 }
|
237
|
+
- {_id: 2, x: 23 }
|
238
|
+
- {_id: 3, x: 33 }
|
239
|
+
-
|
240
|
+
description: "BulkWrite with mixed ordered operations"
|
241
|
+
operation:
|
242
|
+
name: "bulkWrite"
|
243
|
+
arguments:
|
244
|
+
requests:
|
245
|
+
-
|
246
|
+
name: "insertOne"
|
247
|
+
arguments:
|
248
|
+
document: { _id: 3, x: 33 }
|
249
|
+
-
|
250
|
+
name: "updateOne"
|
251
|
+
arguments:
|
252
|
+
filter: { _id: 2 }
|
253
|
+
update: { $inc: { x: 1 } }
|
254
|
+
-
|
255
|
+
name: "updateMany"
|
256
|
+
arguments:
|
257
|
+
filter: { _id: { $gt: 1 } }
|
258
|
+
update: { $inc: { x: 1 } }
|
259
|
+
-
|
260
|
+
name: "insertOne"
|
261
|
+
arguments:
|
262
|
+
document: { _id: 4, x: 44 }
|
263
|
+
-
|
264
|
+
name: "deleteMany"
|
265
|
+
arguments:
|
266
|
+
filter: { x: { $nin: [ 24, 34 ] } }
|
267
|
+
-
|
268
|
+
name: "replaceOne"
|
269
|
+
arguments:
|
270
|
+
filter: { _id: 4 }
|
271
|
+
replacement: { _id: 4, x: 44 }
|
272
|
+
upsert: true
|
273
|
+
options: { ordered: true }
|
274
|
+
outcome:
|
275
|
+
result:
|
276
|
+
deletedCount: 2
|
277
|
+
insertedCount: 2
|
278
|
+
insertedIds: { 0: 3, 3: 4 }
|
279
|
+
matchedCount: 3
|
280
|
+
modifiedCount: 3
|
281
|
+
upsertedCount: 1
|
282
|
+
upsertedIds: { 5: 4 }
|
283
|
+
collection:
|
284
|
+
data:
|
285
|
+
- {_id: 2, x: 24 }
|
286
|
+
- {_id: 3, x: 34 }
|
287
|
+
- {_id: 4, x: 44 }
|
288
|
+
-
|
289
|
+
description: "BulkWrite with mixed unordered operations"
|
290
|
+
operation:
|
291
|
+
name: "bulkWrite"
|
292
|
+
arguments:
|
293
|
+
# We omit inserting multiple documents and updating documents
|
294
|
+
# that may not exist at the start of this test as we cannot
|
295
|
+
# assume the order in which the operations will execute.
|
296
|
+
requests:
|
297
|
+
-
|
298
|
+
name: "replaceOne"
|
299
|
+
arguments:
|
300
|
+
filter: { _id: 3 }
|
301
|
+
replacement: { _id: 3, x: 33 }
|
302
|
+
upsert: true
|
303
|
+
-
|
304
|
+
name: "deleteOne"
|
305
|
+
arguments:
|
306
|
+
filter: { _id: 1 }
|
307
|
+
-
|
308
|
+
name: "updateOne"
|
309
|
+
arguments:
|
310
|
+
filter: { _id: 2 }
|
311
|
+
update: { $inc: { x: 1 } }
|
312
|
+
options: { ordered: false }
|
313
|
+
outcome:
|
314
|
+
result:
|
315
|
+
deletedCount: 1
|
316
|
+
insertedCount: 0
|
317
|
+
insertedIds: {}
|
318
|
+
matchedCount: 1
|
319
|
+
modifiedCount: 1
|
320
|
+
upsertedCount: 1
|
321
|
+
upsertedIds: { 0: 3 }
|
322
|
+
collection:
|
323
|
+
data:
|
324
|
+
- {_id: 2, x: 23 }
|
325
|
+
- {_id: 3, x: 33 }
|
326
|
+
-
|
327
|
+
description: "BulkWrite continue-on-error behavior with unordered (preexisting duplicate key)"
|
328
|
+
operation:
|
329
|
+
name: "bulkWrite"
|
330
|
+
arguments:
|
331
|
+
requests:
|
332
|
+
-
|
333
|
+
name: "insertOne"
|
334
|
+
arguments:
|
335
|
+
document: { _id: 2, x: 22 }
|
336
|
+
-
|
337
|
+
name: "insertOne"
|
338
|
+
arguments:
|
339
|
+
document: { _id: 3, x: 33 }
|
340
|
+
-
|
341
|
+
name: "insertOne"
|
342
|
+
arguments:
|
343
|
+
document: { _id: 4, x: 44 }
|
344
|
+
options: { ordered: false }
|
345
|
+
outcome:
|
346
|
+
error: true
|
347
|
+
result:
|
348
|
+
deletedCount: 0
|
349
|
+
insertedCount: 2
|
350
|
+
# Since the map of insertedIds is generated before execution it
|
351
|
+
# could indicate inserts that did not actually succeed. We omit
|
352
|
+
# this field rather than expect drivers to provide an accurate
|
353
|
+
# map filtered by write errors.
|
354
|
+
matchedCount: 0
|
355
|
+
modifiedCount: 0
|
356
|
+
upsertedCount: 0
|
357
|
+
upsertedIds: { }
|
358
|
+
collection:
|
359
|
+
data:
|
360
|
+
- { _id: 1, x: 11 }
|
361
|
+
- { _id: 2, x: 22 }
|
362
|
+
- { _id: 3, x: 33 }
|
363
|
+
- { _id: 4, x: 44 }
|
364
|
+
-
|
365
|
+
description: "BulkWrite continue-on-error behavior with unordered (duplicate key in requests)"
|
366
|
+
operation:
|
367
|
+
name: "bulkWrite"
|
368
|
+
arguments:
|
369
|
+
requests:
|
370
|
+
-
|
371
|
+
name: "insertOne"
|
372
|
+
arguments:
|
373
|
+
document: { _id: 3, x: 33 }
|
374
|
+
-
|
375
|
+
name: "insertOne"
|
376
|
+
arguments:
|
377
|
+
document: { _id: 3, x: 33 }
|
378
|
+
-
|
379
|
+
name: "insertOne"
|
380
|
+
arguments:
|
381
|
+
document: { _id: 4, x: 44 }
|
382
|
+
options: { ordered: false }
|
383
|
+
outcome:
|
384
|
+
error: true
|
385
|
+
result:
|
386
|
+
deletedCount: 0
|
387
|
+
insertedCount: 2
|
388
|
+
# Since the map of insertedIds is generated before execution it
|
389
|
+
# could indicate inserts that did not actually succeed. We omit
|
390
|
+
# this field rather than expect drivers to provide an accurate
|
391
|
+
# map filtered by write errors.
|
392
|
+
matchedCount: 0
|
393
|
+
modifiedCount: 0
|
394
|
+
upsertedCount: 0
|
395
|
+
upsertedIds: { }
|
396
|
+
collection:
|
397
|
+
data:
|
398
|
+
- { _id: 1, x: 11 }
|
399
|
+
- { _id: 2, x: 22 }
|
400
|
+
- { _id: 3, x: 33 }
|
401
|
+
- { _id: 4, x: 44 }
|