mongo 2.17.2 → 2.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +21 -37
- data/lib/mongo/auth/base.rb +8 -1
- data/lib/mongo/auth.rb +12 -1
- data/lib/mongo/bulk_write/result.rb +10 -1
- data/lib/mongo/bulk_write/result_combiner.rb +2 -4
- data/lib/mongo/bulk_write.rb +115 -29
- data/lib/mongo/client.rb +133 -17
- data/lib/mongo/client_encryption.rb +113 -10
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +11 -1
- data/lib/mongo/cluster.rb +26 -28
- data/lib/mongo/collection/helpers.rb +43 -0
- data/lib/mongo/collection/queryable_encryption.rb +122 -0
- data/lib/mongo/collection/view/aggregation.rb +22 -16
- data/lib/mongo/collection/view/change_stream.rb +65 -23
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +2 -2
- data/lib/mongo/collection/view/map_reduce.rb +18 -9
- data/lib/mongo/collection/view/readable.rb +29 -25
- data/lib/mongo/collection/view/writable.rb +133 -40
- data/lib/mongo/collection.rb +117 -49
- data/lib/mongo/config/options.rb +62 -0
- data/lib/mongo/config/validators/option.rb +26 -0
- data/lib/mongo/config.rb +42 -0
- data/lib/mongo/crypt/auto_encrypter.rb +136 -14
- data/lib/mongo/crypt/binding.rb +513 -144
- data/lib/mongo/crypt/context.rb +5 -2
- data/lib/mongo/crypt/data_key_context.rb +12 -104
- data/lib/mongo/crypt/encryption_io.rb +94 -60
- data/lib/mongo/crypt/explicit_encrypter.rb +143 -26
- data/lib/mongo/crypt/explicit_encryption_context.rb +25 -2
- data/lib/mongo/crypt/handle.rb +160 -86
- data/lib/mongo/crypt/hooks.rb +25 -2
- data/lib/mongo/crypt/kms/aws.rb +136 -0
- data/lib/mongo/crypt/kms/azure.rb +144 -0
- data/lib/mongo/crypt/kms/credentials.rb +81 -0
- data/lib/mongo/crypt/kms/gcp.rb +189 -0
- data/lib/mongo/crypt/kms/kmip.rb +116 -0
- data/lib/mongo/crypt/kms/local.rb +82 -0
- data/lib/mongo/crypt/kms/master_key_document.rb +65 -0
- data/lib/mongo/crypt/kms.rb +117 -0
- data/lib/mongo/crypt/rewrap_many_data_key_context.rb +46 -0
- data/lib/mongo/crypt/rewrap_many_data_key_result.rb +37 -0
- data/lib/mongo/crypt/status.rb +8 -2
- data/lib/mongo/crypt.rb +3 -0
- data/lib/mongo/cursor/kill_spec.rb +27 -6
- data/lib/mongo/cursor.rb +26 -11
- data/lib/mongo/database/view.rb +6 -3
- data/lib/mongo/database.rb +57 -13
- data/lib/mongo/dbref.rb +1 -105
- data/lib/mongo/error/bulk_write_error.rb +31 -4
- data/lib/mongo/error/invalid_config_option.rb +20 -0
- data/lib/mongo/error/invalid_replacement_document.rb +27 -9
- data/lib/mongo/error/invalid_update_document.rb +27 -7
- data/lib/mongo/error/labelable.rb +72 -0
- data/lib/mongo/error/missing_connection.rb +25 -0
- data/lib/mongo/error/missing_file_chunk.rb +8 -2
- data/lib/mongo/error/notable.rb +7 -0
- data/lib/mongo/error/operation_failure.rb +34 -86
- data/lib/mongo/error/read_write_retryable.rb +108 -0
- data/lib/mongo/{operation/kill_cursors/legacy.rb → error/session_not_materialized.rb} +7 -19
- data/lib/mongo/error.rb +5 -37
- data/lib/mongo/grid/stream/read.rb +6 -0
- data/lib/mongo/index/view.rb +23 -7
- data/lib/mongo/monitoring/event/command_failed.rb +8 -2
- data/lib/mongo/monitoring/event/command_started.rb +1 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +9 -2
- data/lib/mongo/monitoring/publishable.rb +9 -5
- data/lib/mongo/operation/collections_info/result.rb +5 -2
- data/lib/mongo/operation/command/op_msg.rb +6 -0
- data/lib/mongo/operation/context.rb +24 -6
- data/lib/mongo/operation/count/op_msg.rb +4 -1
- data/lib/mongo/operation/create/op_msg.rb +4 -1
- data/lib/mongo/operation/create_index/op_msg.rb +2 -1
- data/lib/mongo/operation/delete/op_msg.rb +1 -0
- data/lib/mongo/operation/delete.rb +0 -1
- data/lib/mongo/operation/distinct/op_msg.rb +4 -1
- data/lib/mongo/operation/drop_index/op_msg.rb +5 -1
- data/lib/mongo/operation/get_more/command_builder.rb +5 -1
- data/lib/mongo/operation/insert/bulk_result.rb +5 -1
- data/lib/mongo/operation/insert/command.rb +0 -4
- data/lib/mongo/operation/insert/op_msg.rb +6 -3
- data/lib/mongo/operation/insert/result.rb +6 -3
- data/lib/mongo/operation/insert.rb +0 -1
- data/lib/mongo/operation/kill_cursors.rb +0 -1
- data/lib/mongo/operation/list_collections/op_msg.rb +4 -1
- data/lib/mongo/operation/map_reduce/result.rb +16 -0
- data/lib/mongo/operation/result.rb +21 -5
- data/lib/mongo/operation/shared/executable.rb +21 -6
- data/lib/mongo/operation/shared/polymorphic_operation.rb +15 -3
- data/lib/mongo/operation/shared/response_handling.rb +6 -5
- data/lib/mongo/operation/shared/sessions_supported.rb +7 -3
- data/lib/mongo/operation/shared/write.rb +18 -12
- data/lib/mongo/operation/update/op_msg.rb +2 -1
- data/lib/mongo/operation/update.rb +0 -1
- data/lib/mongo/protocol/caching_hash.rb +69 -0
- data/lib/mongo/protocol/msg.rb +21 -1
- data/lib/mongo/protocol.rb +1 -0
- data/lib/mongo/query_cache.rb +15 -0
- data/lib/mongo/retryable.rb +78 -30
- data/lib/mongo/server/connection.rb +33 -0
- data/lib/mongo/server/connection_base.rb +2 -0
- data/lib/mongo/server/connection_common.rb +4 -1
- data/lib/mongo/server/connection_pool.rb +74 -46
- data/lib/mongo/server/description/features.rb +3 -1
- data/lib/mongo/server/description.rb +7 -2
- data/lib/mongo/server/monitor/connection.rb +1 -0
- data/lib/mongo/server/monitor.rb +25 -13
- data/lib/mongo/server/push_monitor.rb +13 -3
- data/lib/mongo/server.rb +9 -5
- data/lib/mongo/session/session_pool.rb +8 -0
- data/lib/mongo/session.rb +111 -35
- data/lib/mongo/socket/ocsp_verifier.rb +4 -5
- data/lib/mongo/socket/tcp.rb +3 -0
- data/lib/mongo/srv/resolver.rb +24 -3
- data/lib/mongo/uri/options_mapper.rb +2 -0
- data/lib/mongo/uri/srv_protocol.rb +1 -1
- data/lib/mongo/uri.rb +20 -0
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +22 -0
- data/mongo.gemspec +10 -4
- data/spec/README.md +23 -5
- data/spec/integration/aws_lambda_examples_spec.rb +68 -0
- data/spec/integration/bulk_write_error_message_spec.rb +32 -0
- data/spec/integration/bulk_write_spec.rb +16 -0
- data/spec/integration/change_stream_spec.rb +6 -5
- data/spec/integration/client_construction_spec.rb +74 -8
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -9
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +168 -168
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -1
- data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +31 -0
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +108 -1
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +2 -2
- data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +2 -2
- data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
- data/spec/integration/client_side_encryption/corpus_spec.rb +64 -35
- data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +39 -42
- data/spec/integration/client_side_encryption/data_key_spec.rb +97 -7
- data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +158 -0
- data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +59 -0
- data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +147 -0
- data/spec/integration/client_side_encryption/external_key_vault_spec.rb +6 -6
- data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +436 -0
- data/spec/integration/client_side_encryption/kms_tls_spec.rb +92 -0
- data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +111 -0
- data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +85 -0
- data/spec/integration/client_side_encryption/views_spec.rb +1 -1
- data/spec/integration/client_update_spec.rb +2 -2
- data/spec/integration/crud_spec.rb +12 -0
- data/spec/integration/cursor_pinning_spec.rb +3 -3
- data/spec/integration/fork_reconnect_spec.rb +15 -8
- data/spec/integration/grid_fs_bucket_spec.rb +3 -3
- data/spec/integration/ocsp_verifier_spec.rb +3 -0
- data/spec/integration/query_cache_spec.rb +34 -30
- data/spec/integration/reconnect_spec.rb +2 -0
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
- data/spec/integration/server_monitor_spec.rb +2 -1
- data/spec/integration/size_limit_spec.rb +4 -1
- data/spec/integration/snapshot_query_examples_spec.rb +127 -0
- data/spec/integration/srv_monitoring_spec.rb +38 -0
- data/spec/integration/srv_spec.rb +1 -0
- data/spec/integration/step_down_spec.rb +20 -4
- data/spec/integration/transaction_pinning_spec.rb +2 -2
- data/spec/integration/versioned_api_examples_spec.rb +37 -31
- data/spec/lite_spec_helper.rb +19 -9
- data/spec/mongo/address/ipv6_spec.rb +7 -0
- data/spec/mongo/address_spec.rb +7 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +23 -23
- data/spec/mongo/auth/scram256/conversation_spec.rb +20 -20
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -0
- data/spec/mongo/bulk_write/result_spec.rb +15 -1
- data/spec/mongo/bulk_write_spec.rb +141 -20
- data/spec/mongo/client_construction_spec.rb +186 -9
- data/spec/mongo/client_encryption_spec.rb +10 -22
- data/spec/mongo/client_spec.rb +297 -1
- data/spec/mongo/cluster/cursor_reaper_spec.rb +21 -3
- data/spec/mongo/cluster_spec.rb +0 -44
- data/spec/mongo/collection/view/aggregation_spec.rb +121 -2
- data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
- data/spec/mongo/collection/view/readable_spec.rb +605 -1
- data/spec/mongo/collection/view/writable_spec.rb +144 -32
- data/spec/mongo/collection_crud_spec.rb +63 -13
- data/spec/mongo/collection_spec.rb +32 -0
- data/spec/mongo/config/options_spec.rb +75 -0
- data/spec/mongo/config_spec.rb +73 -0
- data/spec/mongo/crypt/auto_decryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/auto_encrypter_spec.rb +256 -5
- data/spec/mongo/crypt/auto_encryption_context_spec.rb +17 -1
- data/spec/mongo/crypt/binding/context_spec.rb +67 -17
- data/spec/mongo/crypt/binding/mongocrypt_spec.rb +17 -46
- data/spec/mongo/crypt/binding/version_spec.rb +33 -0
- data/spec/mongo/crypt/binding_unloaded_spec.rb +14 -0
- data/spec/mongo/crypt/data_key_context_spec.rb +42 -114
- data/spec/mongo/crypt/encryption_io_spec.rb +2 -0
- data/spec/mongo/crypt/explicit_decryption_context_spec.rb +32 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +94 -1
- data/spec/mongo/crypt/handle_spec.rb +172 -156
- data/spec/mongo/crypt/hooks_spec.rb +30 -0
- data/spec/mongo/crypt/kms/credentials_spec.rb +357 -0
- data/spec/mongo/crypt/kms_spec.rb +59 -0
- data/spec/mongo/cursor_spec.rb +87 -1
- data/spec/mongo/database_spec.rb +66 -1
- data/spec/mongo/error/operation_failure_heavy_spec.rb +49 -0
- data/spec/mongo/index/view_spec.rb +125 -0
- data/spec/mongo/operation/create/op_msg_spec.rb +244 -0
- data/spec/mongo/operation/delete/op_msg_spec.rb +13 -4
- data/spec/mongo/operation/delete_spec.rb +0 -30
- data/spec/mongo/operation/insert/op_msg_spec.rb +18 -10
- data/spec/mongo/operation/insert_spec.rb +0 -32
- data/spec/mongo/operation/result_spec.rb +20 -0
- data/spec/mongo/operation/update/op_msg_spec.rb +13 -4
- data/spec/mongo/operation/update_spec.rb +0 -29
- data/spec/mongo/protocol/caching_hash_spec.rb +82 -0
- data/spec/mongo/protocol/msg_spec.rb +41 -0
- data/spec/mongo/query_cache_spec.rb +1 -0
- data/spec/mongo/retryable_spec.rb +32 -3
- data/spec/mongo/server/connection_auth_spec.rb +3 -1
- data/spec/mongo/server/connection_common_spec.rb +13 -1
- data/spec/mongo/server/connection_pool_spec.rb +120 -53
- data/spec/mongo/server/connection_spec.rb +50 -159
- data/spec/mongo/server/description/features_spec.rb +24 -0
- data/spec/mongo/server/push_monitor_spec.rb +2 -8
- data/spec/mongo/session_spec.rb +26 -6
- data/spec/mongo/session_transaction_spec.rb +2 -1
- data/spec/mongo/socket/ssl_spec.rb +18 -7
- data/spec/mongo/uri/srv_protocol_spec.rb +101 -2
- data/spec/mongo/uri_spec.rb +25 -0
- data/spec/runners/connection_string.rb +8 -0
- data/spec/runners/crud/operation.rb +12 -3
- data/spec/runners/crud/requirement.rb +9 -4
- data/spec/runners/crud/spec.rb +5 -0
- data/spec/runners/crud/test.rb +1 -1
- data/spec/runners/crud/verifier.rb +6 -0
- data/spec/runners/transactions/spec.rb +2 -2
- data/spec/runners/transactions/test.rb +19 -16
- data/spec/runners/transactions.rb +11 -8
- data/spec/runners/unified/assertions.rb +90 -11
- data/spec/runners/unified/change_stream_operations.rb +12 -0
- data/spec/runners/unified/client_side_encryption_operations.rb +83 -0
- data/spec/runners/unified/crud_operations.rb +67 -4
- data/spec/runners/unified/ddl_operations.rb +45 -0
- data/spec/runners/unified/error.rb +2 -1
- data/spec/runners/unified/grid_fs_operations.rb +21 -0
- data/spec/runners/unified/support_operations.rb +5 -2
- data/spec/runners/unified/test.rb +78 -5
- data/spec/runners/unified.rb +9 -2
- data/spec/shared/lib/mrss/constraints.rb +10 -17
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
- data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/share/Dockerfile.erb +56 -54
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +46 -21
- data/spec/shared/shlib/set_env.sh +43 -5
- data/spec/solo/clean_exit_spec.rb +5 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/spec_tests/client_side_encryption_spec.rb +1 -1
- data/spec/spec_tests/client_side_encryption_unified_spec.rb +16 -0
- data/spec/spec_tests/crud_spec.rb +0 -10
- data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +124 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +351 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1171 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1071 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +298 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams.yml +859 -4
- data/spec/spec_tests/data/client_side_encryption/aggregate.yml +3 -17
- data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +12 -2
- data/spec/spec_tests/data/client_side_encryption/basic.yml +3 -17
- data/spec/spec_tests/data/client_side_encryption/bulk.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +2 -2
- data/spec/spec_tests/data/client_side_encryption/count.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +58 -0
- data/spec/spec_tests/data/client_side_encryption/delete.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/distinct.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/explain.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/find.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/fle2-BypassQueryAnalysis.yml +101 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Compact.yml +80 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-CreateCollection.yml +1263 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-DecryptExistingData.yml +64 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Delete.yml +107 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-EncryptedFieldsMap.yml +80 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFields-vs-jsonSchema.yml +90 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-EncryptedFieldsMap-defaults.yml +57 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-FindOneAndUpdate.yml +213 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Indexed.yml +86 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-InsertFind-Unindexed.yml +83 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-MissingKey.yml +41 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-NoEncryption.yml +42 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-Update.yml +221 -0
- data/spec/spec_tests/data/client_side_encryption/fle2-validatorAndPartialFieldExpression.yml +168 -0
- data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +46 -0
- data/spec/spec_tests/data/client_side_encryption/getMore.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/insert.yml +2 -16
- data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/localKMS.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/localSchema.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +2 -0
- data/spec/spec_tests/data/client_side_encryption/missingKey.yml +2 -9
- data/spec/spec_tests/data/client_side_encryption/noSchema.yml +39 -0
- data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/types.yml +44 -70
- data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +194 -0
- data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +67 -0
- data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +309 -0
- data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +159 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +105 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +104 -0
- data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +122 -0
- data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +157 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +69 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +122 -0
- data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +432 -0
- data/spec/spec_tests/data/client_side_encryption/updateMany.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/updateOne.yml +1 -8
- data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +166 -0
- data/spec/spec_tests/data/collection_management/clustered-indexes.yml +135 -0
- data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +50 -0
- data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +58 -0
- data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +68 -0
- data/spec/spec_tests/data/command_monitoring_unified/command.yml +50 -0
- data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/find.yml +254 -0
- data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +79 -0
- data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +77 -0
- data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +56 -0
- data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +56 -0
- data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +55 -0
- data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +87 -0
- data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +118 -0
- data/spec/spec_tests/data/crud/read/aggregate-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/count-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/distinct-collation.yml +1 -1
- data/spec/spec_tests/data/crud/read/find-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/updateMany-collation.yml +1 -1
- data/spec/spec_tests/data/crud/write/updateOne-collation.yml +1 -1
- data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +75 -0
- data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +185 -0
- data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +171 -0
- data/spec/spec_tests/data/crud_unified/aggregate.yml +215 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +98 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +174 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +189 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +113 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +142 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +154 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +98 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +86 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +97 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +86 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +165 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +103 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +93 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +148 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +239 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +256 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +73 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +150 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +104 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +96 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +150 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +103 -0
- data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +95 -0
- data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +92 -0
- data/spec/spec_tests/data/crud_unified/db-aggregate.yml +73 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +97 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +87 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +107 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +90 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +99 -0
- data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +2 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +98 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +80 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +100 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +89 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +95 -0
- data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +2 -0
- data/spec/spec_tests/data/crud_unified/distinct-comment.yml +98 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +95 -0
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +5 -135
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +55 -0
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +68 -0
- data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +79 -0
- data/spec/spec_tests/data/crud_unified/find-comment.yml +166 -0
- data/spec/spec_tests/data/crud_unified/find.yml +68 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +96 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +91 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +107 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +88 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +102 -0
- data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +2 -4
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +101 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +140 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +83 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +99 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +96 -0
- data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +98 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +95 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +127 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +84 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +100 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +92 -0
- data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +99 -0
- data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +93 -0
- data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +128 -0
- data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +91 -0
- data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +238 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +105 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +180 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +95 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +108 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +98 -0
- data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +37 -0
- data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +104 -0
- data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +91 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +115 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +96 -0
- data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +115 -0
- data/spec/spec_tests/data/crud_unified/updateMany-let.yml +5 -1
- data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +39 -0
- data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +104 -0
- data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +138 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +85 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +109 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +95 -0
- data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +109 -0
- data/spec/spec_tests/data/crud_unified/updateOne-let.yml +5 -1
- data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +37 -0
- data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +8 -14
- data/spec/spec_tests/data/gridfs_unified/delete.yml +198 -0
- data/spec/spec_tests/data/gridfs_unified/download.yml +241 -0
- data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +159 -0
- data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +92 -0
- data/spec/spec_tests/data/gridfs_unified/upload.yml +288 -0
- data/spec/spec_tests/data/retryable_reads/{aggregate-merge.yml → legacy/aggregate-merge.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{aggregate-serverErrors.yml → legacy/aggregate-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{aggregate.yml → legacy/aggregate.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch-serverErrors.yml → legacy/changeStreams-client.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-client.watch.yml → legacy/changeStreams-client.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch-serverErrors.yml → legacy/changeStreams-db.coll.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.coll.watch.yml → legacy/changeStreams-db.coll.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch-serverErrors.yml → legacy/changeStreams-db.watch-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{changeStreams-db.watch.yml → legacy/changeStreams-db.watch.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{count-serverErrors.yml → legacy/count-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{count.yml → legacy/count.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{countDocuments-serverErrors.yml → legacy/countDocuments-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{countDocuments.yml → legacy/countDocuments.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{distinct-serverErrors.yml → legacy/distinct-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{distinct.yml → legacy/distinct.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors-pre4.9.yml → legacy/estimatedDocumentCount-serverErrors.yml} +0 -2
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-pre4.9.yml → legacy/estimatedDocumentCount.yml} +0 -2
- data/spec/spec_tests/data/retryable_reads/{find-serverErrors.yml → legacy/find-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{find.yml → legacy/find.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{findOne-serverErrors.yml → legacy/findOne-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{findOne.yml → legacy/findOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-download-serverErrors.yml → legacy/gridfs-download-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-download.yml → legacy/gridfs-download.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName-serverErrors.yml → legacy/gridfs-downloadByName-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{gridfs-downloadByName.yml → legacy/gridfs-downloadByName.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionNames-serverErrors.yml → legacy/listCollectionNames-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionNames.yml → legacy/listCollectionNames.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionObjects-serverErrors.yml → legacy/listCollectionObjects-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollectionObjects.yml → legacy/listCollectionObjects.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollections-serverErrors.yml → legacy/listCollections-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listCollections.yml → legacy/listCollections.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseNames-serverErrors.yml → legacy/listDatabaseNames-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseNames.yml → legacy/listDatabaseNames.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects-serverErrors.yml → legacy/listDatabaseObjects-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabaseObjects.yml → legacy/listDatabaseObjects.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabases-serverErrors.yml → legacy/listDatabases-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listDatabases.yml → legacy/listDatabases.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexNames-serverErrors.yml → legacy/listIndexNames-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexNames.yml → legacy/listIndexNames.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexes-serverErrors.yml → legacy/listIndexes-serverErrors.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{listIndexes.yml → legacy/listIndexes.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/{mapReduce.yml → legacy/mapReduce.yml} +0 -0
- data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +129 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite-errorLabels.yml → legacy/bulkWrite-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{bulkWrite-serverErrors.yml → legacy/bulkWrite-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{bulkWrite.yml → legacy/bulkWrite.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{deleteMany.yml → legacy/deleteMany.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{deleteOne-errorLabels.yml → legacy/deleteOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{deleteOne-serverErrors.yml → legacy/deleteOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{deleteOne.yml → legacy/deleteOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-errorLabels.yml → legacy/findOneAndDelete-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete-serverErrors.yml → legacy/findOneAndDelete-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndDelete.yml → legacy/findOneAndDelete.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-errorLabels.yml → legacy/findOneAndReplace-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace-serverErrors.yml → legacy/findOneAndReplace-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndReplace.yml → legacy/findOneAndReplace.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-errorLabels.yml → legacy/findOneAndUpdate-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate-serverErrors.yml → legacy/findOneAndUpdate-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{findOneAndUpdate.yml → legacy/findOneAndUpdate.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertMany-errorLabels.yml → legacy/insertMany-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertMany-serverErrors.yml → legacy/insertMany-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{insertMany.yml → legacy/insertMany.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertOne-errorLabels.yml → legacy/insertOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{insertOne-serverErrors.yml → legacy/insertOne-serverErrors.yml} +5 -5
- data/spec/spec_tests/data/retryable_writes/{insertOne.yml → legacy/insertOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{replaceOne-errorLabels.yml → legacy/replaceOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{replaceOne-serverErrors.yml → legacy/replaceOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{replaceOne.yml → legacy/replaceOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{updateMany.yml → legacy/updateMany.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{updateOne-errorLabels.yml → legacy/updateOne-errorLabels.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/{updateOne-serverErrors.yml → legacy/updateOne-serverErrors.yml} +1 -1
- data/spec/spec_tests/data/retryable_writes/{updateOne.yml → legacy/updateOne.yml} +0 -0
- data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +96 -0
- data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +137 -0
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +78 -0
- data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +2 -2
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +6 -14
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +4 -14
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +8 -14
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +11 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +16 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +12 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +10 -0
- data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +11 -0
- data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +11 -0
- data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +11 -0
- data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +123 -0
- data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +9 -3
- data/spec/spec_tests/data/transactions/error-labels.yml +1 -1
- data/spec/spec_tests/data/transactions/errors-client.yml +8 -9
- data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -1
- data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -2
- data/spec/spec_tests/data/transactions/retryable-abort.yml +7 -9
- data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -2
- data/spec/spec_tests/data/transactions/retryable-commit.yml +7 -9
- data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -2
- data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
- data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
- data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
- data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +15 -0
- data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +13 -0
- data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +78 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +4 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +3 -3
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -2
- data/spec/spec_tests/data/uri_options/srv-options.yml +96 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +6 -4
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +7 -5
- data/spec/spec_tests/gridfs_unified_spec.rb +13 -0
- data/spec/spec_tests/retryable_reads_spec.rb +4 -1
- data/spec/spec_tests/retryable_reads_unified_spec.rb +22 -0
- data/spec/spec_tests/retryable_writes_spec.rb +4 -1
- data/spec/spec_tests/retryable_writes_unified_spec.rb +21 -0
- data/spec/spec_tests/seed_list_discovery_spec.rb +10 -1
- data/spec/spec_tests/unified_spec.rb +6 -1
- data/spec/stress/connection_pool_timing_spec.rb +3 -2
- data/spec/stress/fork_reconnect_stress_spec.rb +3 -2
- data/spec/support/authorization.rb +1 -1
- data/spec/support/background_thread_registry.rb +3 -13
- data/spec/support/certificates/retrieve-atlas-cert +38 -0
- data/spec/support/cluster_tools.rb +1 -1
- data/spec/support/common_shortcuts.rb +22 -0
- data/spec/support/crypt/corpus/corpus-encrypted.json +9515 -0
- data/spec/support/crypt/corpus/corpus-key-aws.json +32 -32
- data/spec/support/crypt/corpus/corpus-key-azure.json +33 -0
- data/spec/support/crypt/corpus/corpus-key-gcp.json +35 -0
- data/spec/support/crypt/corpus/corpus-key-kmip.json +32 -0
- data/spec/support/crypt/corpus/corpus-key-local.json +30 -30
- data/spec/support/crypt/corpus/corpus-schema.json +4399 -121
- data/spec/support/crypt/corpus/corpus.json +4999 -37
- data/spec/support/crypt/data_keys/key_document_azure.json +33 -0
- data/spec/support/crypt/data_keys/key_document_gcp.json +37 -0
- data/spec/support/crypt/data_keys/key_document_kmip.json +32 -0
- data/spec/support/crypt/encryptedFields.json +33 -0
- data/spec/support/crypt/keys/key1-document.json +30 -0
- data/spec/support/crypt/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/crypt/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/crypt.rb +258 -13
- data/spec/support/macros.rb +28 -0
- data/spec/support/mongos_macros.rb +17 -0
- data/spec/support/shared/scram_conversation.rb +2 -1
- data/spec/support/shared/session.rb +13 -7
- data/spec/support/spec_config.rb +90 -1
- data/spec/support/utils.rb +25 -4
- data.tar.gz.sig +0 -0
- metadata +604 -290
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/delete/legacy.rb +0 -64
- data/lib/mongo/operation/insert/legacy.rb +0 -68
- data/lib/mongo/operation/update/legacy/result.rb +0 -112
- data/lib/mongo/operation/update/legacy.rb +0 -76
- data/spec/mongo/dbref_spec.rb +0 -152
- data/spec/mongo/operation/kill_cursors_spec.rb +0 -47
- data/spec/spec_tests/change_streams_spec.rb +0 -93
- data/spec/spec_tests/command_monitoring_spec.rb +0 -71
- data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -101
- data/spec/spec_tests/data/change_streams/change-streams-resume-allowlist.yml +0 -1173
- data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +0 -1105
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -535
- data/spec/spec_tests/data/command_monitoring/bulkWrite.yml +0 -49
- data/spec/spec_tests/data/command_monitoring/command.yml +0 -61
- data/spec/spec_tests/data/command_monitoring/deleteMany.yml +0 -55
- data/spec/spec_tests/data/command_monitoring/deleteOne.yml +0 -55
- data/spec/spec_tests/data/command_monitoring/find.yml +0 -266
- data/spec/spec_tests/data/command_monitoring/insertMany.yml +0 -75
- data/spec/spec_tests/data/command_monitoring/insertOne.yml +0 -51
- data/spec/spec_tests/data/command_monitoring/unacknowledgedBulkWrite.yml +0 -34
- data/spec/spec_tests/data/command_monitoring/updateMany.yml +0 -65
- data/spec/spec_tests/data/command_monitoring/updateOne.yml +0 -90
- data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +0 -103
- data/spec/spec_tests/data/crud_v2/aggregate-out-readConcern.yml +0 -111
- data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +0 -103
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +0 -63
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +0 -92
- data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +0 -103
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +0 -90
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +0 -147
- data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +0 -164
- data/spec/spec_tests/data/crud_v2/db-aggregate.yml +0 -39
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +0 -62
- data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +0 -58
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +0 -41
- data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +0 -57
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +0 -28
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +0 -44
- data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +0 -50
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +0 -45
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +0 -56
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +0 -59
- data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +0 -55
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +0 -58
- data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +0 -55
- data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +0 -61
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +0 -60
- data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +0 -88
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +0 -38
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +0 -42
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +0 -40
- data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +0 -45
- data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +0 -66
- data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +0 -65
- data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +0 -43
- data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +0 -62
- data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +0 -61
- data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +0 -157
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +0 -60
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +0 -146
- data/spec/support/crypt/corpus/corpus_encrypted.json +0 -4152
- data/spec/support/session_registry.rb +0 -55
|
@@ -50,6 +50,8 @@ module Mongo
|
|
|
50
50
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
|
51
51
|
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
|
52
52
|
# See the server documentation for details.
|
|
53
|
+
# @option options [ Object ] :comment A user-provided
|
|
54
|
+
# comment to attach to this command.
|
|
53
55
|
#
|
|
54
56
|
# @return [ BSON::Document, nil ] The document, if found.
|
|
55
57
|
#
|
|
@@ -61,9 +63,6 @@ module Mongo
|
|
|
61
63
|
else
|
|
62
64
|
write_concern_with_session(session)
|
|
63
65
|
end
|
|
64
|
-
if opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
65
|
-
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
66
|
-
end
|
|
67
66
|
|
|
68
67
|
QueryCache.clear_namespace(collection.namespace)
|
|
69
68
|
|
|
@@ -77,21 +76,30 @@ module Mongo
|
|
|
77
76
|
bypassDocumentValidation: opts[:bypass_document_validation],
|
|
78
77
|
hint: opts[:hint],
|
|
79
78
|
collation: opts[:collation] || opts['collation'] || collation,
|
|
80
|
-
let: opts[:let]
|
|
79
|
+
let: opts[:let],
|
|
80
|
+
comment: opts[:comment],
|
|
81
81
|
}.compact
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
context = Operation::Context.new(client: client, session: session)
|
|
84
|
+
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
|
85
|
+
gte_4_4 = connection.server.description.server_version_gte?('4.4')
|
|
86
|
+
if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
87
|
+
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
88
|
+
end
|
|
89
|
+
|
|
84
90
|
Operation::WriteCommand.new(
|
|
85
91
|
selector: cmd,
|
|
86
92
|
db_name: database.name,
|
|
87
93
|
write_concern: write_concern,
|
|
88
94
|
session: session,
|
|
89
95
|
txn_num: txn_num,
|
|
90
|
-
).
|
|
96
|
+
).execute_with_connection(connection, context: context)
|
|
91
97
|
end
|
|
92
|
-
end.first
|
|
98
|
+
end.first&.fetch('value', nil)
|
|
93
99
|
end
|
|
94
100
|
|
|
101
|
+
# db['users'].bulk_write([{insert_one: {x: 1}}, {insert_one: {x: 2}}])
|
|
102
|
+
|
|
95
103
|
# Finds a single document and replaces it.
|
|
96
104
|
#
|
|
97
105
|
# @example Find a document and replace it, returning the original.
|
|
@@ -149,8 +157,10 @@ module Mongo
|
|
|
149
157
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
|
150
158
|
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
|
151
159
|
# See the server documentation for details.
|
|
160
|
+
# @option options [ Object ] :comment A user-provided
|
|
161
|
+
# comment to attach to this command.
|
|
152
162
|
#
|
|
153
|
-
# @return [ BSON::Document ] The document.
|
|
163
|
+
# @return [ BSON::Document | nil ] The document or nil if none is found.
|
|
154
164
|
#
|
|
155
165
|
# @since 2.0.0
|
|
156
166
|
def find_one_and_update(document, opts = {})
|
|
@@ -160,9 +170,6 @@ module Mongo
|
|
|
160
170
|
else
|
|
161
171
|
write_concern_with_session(session)
|
|
162
172
|
end
|
|
163
|
-
if opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
164
|
-
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
165
|
-
end
|
|
166
173
|
|
|
167
174
|
QueryCache.clear_namespace(collection.namespace)
|
|
168
175
|
|
|
@@ -180,18 +187,25 @@ module Mongo
|
|
|
180
187
|
hint: opts[:hint],
|
|
181
188
|
collation: opts[:collation] || opts['collation'] || collation,
|
|
182
189
|
let: opts[:let],
|
|
190
|
+
comment: opts[:comment]
|
|
183
191
|
}.compact
|
|
184
192
|
|
|
185
|
-
|
|
193
|
+
context = Operation::Context.new(client: client, session: session)
|
|
194
|
+
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
|
195
|
+
gte_4_4 = connection.server.description.server_version_gte?('4.4')
|
|
196
|
+
if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
197
|
+
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
198
|
+
end
|
|
199
|
+
|
|
186
200
|
Operation::WriteCommand.new(
|
|
187
201
|
selector: cmd,
|
|
188
202
|
db_name: database.name,
|
|
189
203
|
write_concern: write_concern,
|
|
190
204
|
session: session,
|
|
191
205
|
txn_num: txn_num,
|
|
192
|
-
).
|
|
206
|
+
).execute_with_connection(connection, context: context)
|
|
193
207
|
end
|
|
194
|
-
end.first
|
|
208
|
+
end.first&.fetch('value', nil)
|
|
195
209
|
value unless value.nil? || value.empty?
|
|
196
210
|
end
|
|
197
211
|
|
|
@@ -210,6 +224,8 @@ module Mongo
|
|
|
210
224
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
|
211
225
|
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
|
212
226
|
# See the server documentation for details.
|
|
227
|
+
# @option options [ Object ] :comment A user-provided
|
|
228
|
+
# comment to attach to this command.
|
|
213
229
|
#
|
|
214
230
|
# @return [ Result ] The response from the database.
|
|
215
231
|
#
|
|
@@ -221,9 +237,6 @@ module Mongo
|
|
|
221
237
|
else
|
|
222
238
|
write_concern_with_session(session)
|
|
223
239
|
end
|
|
224
|
-
if opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
225
|
-
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
226
|
-
end
|
|
227
240
|
|
|
228
241
|
QueryCache.clear_namespace(collection.namespace)
|
|
229
242
|
|
|
@@ -234,7 +247,13 @@ module Mongo
|
|
|
234
247
|
collation: opts[:collation] || opts['collation'] || collation,
|
|
235
248
|
}.compact
|
|
236
249
|
|
|
237
|
-
|
|
250
|
+
context = Operation::Context.new(client: client, session: session)
|
|
251
|
+
nro_write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
|
252
|
+
gte_4_4 = connection.server.description.server_version_gte?('4.4')
|
|
253
|
+
if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
254
|
+
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
255
|
+
end
|
|
256
|
+
|
|
238
257
|
Operation::Delete.new(
|
|
239
258
|
deletes: [ delete_doc ],
|
|
240
259
|
db_name: collection.database.name,
|
|
@@ -243,7 +262,8 @@ module Mongo
|
|
|
243
262
|
bypass_document_validation: !!opts[:bypass_document_validation],
|
|
244
263
|
session: session,
|
|
245
264
|
let: opts[:let],
|
|
246
|
-
|
|
265
|
+
comment: opts[:comment],
|
|
266
|
+
).execute_with_connection(connection, context: context)
|
|
247
267
|
end
|
|
248
268
|
end
|
|
249
269
|
end
|
|
@@ -263,6 +283,8 @@ module Mongo
|
|
|
263
283
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
|
264
284
|
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
|
265
285
|
# See the server documentation for details.
|
|
286
|
+
# @option options [ Object ] :comment A user-provided
|
|
287
|
+
# comment to attach to this command.
|
|
266
288
|
#
|
|
267
289
|
# @return [ Result ] The response from the database.
|
|
268
290
|
#
|
|
@@ -274,9 +296,6 @@ module Mongo
|
|
|
274
296
|
else
|
|
275
297
|
write_concern_with_session(session)
|
|
276
298
|
end
|
|
277
|
-
if opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
278
|
-
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
279
|
-
end
|
|
280
299
|
|
|
281
300
|
QueryCache.clear_namespace(collection.namespace)
|
|
282
301
|
|
|
@@ -287,7 +306,13 @@ module Mongo
|
|
|
287
306
|
collation: opts[:collation] || opts['collation'] || collation,
|
|
288
307
|
}.compact
|
|
289
308
|
|
|
290
|
-
|
|
309
|
+
context = Operation::Context.new(client: client, session: session)
|
|
310
|
+
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
|
311
|
+
gte_4_4 = connection.server.description.server_version_gte?('4.4')
|
|
312
|
+
if !gte_4_4 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
313
|
+
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
314
|
+
end
|
|
315
|
+
|
|
291
316
|
Operation::Delete.new(
|
|
292
317
|
deletes: [ delete_doc ],
|
|
293
318
|
db_name: collection.database.name,
|
|
@@ -297,7 +322,8 @@ module Mongo
|
|
|
297
322
|
session: session,
|
|
298
323
|
txn_num: txn_num,
|
|
299
324
|
let: opts[:let],
|
|
300
|
-
|
|
325
|
+
comment: opts[:comment],
|
|
326
|
+
).execute_with_connection(connection, context: context)
|
|
301
327
|
end
|
|
302
328
|
end
|
|
303
329
|
end
|
|
@@ -322,6 +348,8 @@ module Mongo
|
|
|
322
348
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
|
323
349
|
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
|
324
350
|
# See the server documentation for details.
|
|
351
|
+
# @option options [ Object ] :comment A user-provided
|
|
352
|
+
# comment to attach to this command.
|
|
325
353
|
#
|
|
326
354
|
# @return [ Result ] The response from the database.
|
|
327
355
|
#
|
|
@@ -333,9 +361,7 @@ module Mongo
|
|
|
333
361
|
else
|
|
334
362
|
write_concern_with_session(session)
|
|
335
363
|
end
|
|
336
|
-
|
|
337
|
-
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
338
|
-
end
|
|
364
|
+
validate_replacement_documents!(replacement)
|
|
339
365
|
|
|
340
366
|
QueryCache.clear_namespace(collection.namespace)
|
|
341
367
|
|
|
@@ -350,7 +376,13 @@ module Mongo
|
|
|
350
376
|
update_doc['upsert'] = true
|
|
351
377
|
end
|
|
352
378
|
|
|
353
|
-
|
|
379
|
+
context = Operation::Context.new(client: client, session: session)
|
|
380
|
+
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
|
381
|
+
gte_4_2 = connection.server.description.server_version_gte?('4.2')
|
|
382
|
+
if !gte_4_2 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
383
|
+
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
384
|
+
end
|
|
385
|
+
|
|
354
386
|
Operation::Update.new(
|
|
355
387
|
updates: [ update_doc ],
|
|
356
388
|
db_name: collection.database.name,
|
|
@@ -359,8 +391,9 @@ module Mongo
|
|
|
359
391
|
bypass_document_validation: !!opts[:bypass_document_validation],
|
|
360
392
|
session: session,
|
|
361
393
|
txn_num: txn_num,
|
|
362
|
-
let: opts[:let]
|
|
363
|
-
|
|
394
|
+
let: opts[:let],
|
|
395
|
+
comment: opts[:comment],
|
|
396
|
+
).execute_with_connection(connection, context: context)
|
|
364
397
|
end
|
|
365
398
|
end
|
|
366
399
|
end
|
|
@@ -387,6 +420,8 @@ module Mongo
|
|
|
387
420
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
|
388
421
|
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
|
389
422
|
# See the server documentation for details.
|
|
423
|
+
# @option options [ Object ] :comment A user-provided
|
|
424
|
+
# comment to attach to this command.
|
|
390
425
|
#
|
|
391
426
|
# @return [ Result ] The response from the database.
|
|
392
427
|
#
|
|
@@ -398,9 +433,7 @@ module Mongo
|
|
|
398
433
|
else
|
|
399
434
|
write_concern_with_session(session)
|
|
400
435
|
end
|
|
401
|
-
|
|
402
|
-
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
403
|
-
end
|
|
436
|
+
validate_update_documents!(spec)
|
|
404
437
|
|
|
405
438
|
QueryCache.clear_namespace(collection.namespace)
|
|
406
439
|
|
|
@@ -416,7 +449,13 @@ module Mongo
|
|
|
416
449
|
update_doc['upsert'] = true
|
|
417
450
|
end
|
|
418
451
|
|
|
419
|
-
|
|
452
|
+
context = Operation::Context.new(client: client, session: session)
|
|
453
|
+
nro_write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
|
454
|
+
gte_4_2 = connection.server.description.server_version_gte?('4.2')
|
|
455
|
+
if !gte_4_2 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
456
|
+
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
457
|
+
end
|
|
458
|
+
|
|
420
459
|
Operation::Update.new(
|
|
421
460
|
updates: [ update_doc ],
|
|
422
461
|
db_name: collection.database.name,
|
|
@@ -425,7 +464,8 @@ module Mongo
|
|
|
425
464
|
bypass_document_validation: !!opts[:bypass_document_validation],
|
|
426
465
|
session: session,
|
|
427
466
|
let: opts[:let],
|
|
428
|
-
|
|
467
|
+
comment: opts[:comment],
|
|
468
|
+
).execute_with_connection(connection, context: context)
|
|
429
469
|
end
|
|
430
470
|
end
|
|
431
471
|
end
|
|
@@ -452,6 +492,8 @@ module Mongo
|
|
|
452
492
|
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
|
453
493
|
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
|
454
494
|
# See the server documentation for details.
|
|
495
|
+
# @option options [ Object ] :comment A user-provided
|
|
496
|
+
# comment to attach to this command.
|
|
455
497
|
#
|
|
456
498
|
# @return [ Result ] The response from the database.
|
|
457
499
|
#
|
|
@@ -463,9 +505,7 @@ module Mongo
|
|
|
463
505
|
else
|
|
464
506
|
write_concern_with_session(session)
|
|
465
507
|
end
|
|
466
|
-
|
|
467
|
-
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
468
|
-
end
|
|
508
|
+
validate_update_documents!(spec)
|
|
469
509
|
|
|
470
510
|
QueryCache.clear_namespace(collection.namespace)
|
|
471
511
|
|
|
@@ -480,7 +520,13 @@ module Mongo
|
|
|
480
520
|
update_doc['upsert'] = true
|
|
481
521
|
end
|
|
482
522
|
|
|
483
|
-
|
|
523
|
+
context = Operation::Context.new(client: client, session: session)
|
|
524
|
+
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
|
525
|
+
gte_4_2 = connection.server.description.server_version_gte?('4.2')
|
|
526
|
+
if !gte_4_2 && opts[:hint] && write_concern && !write_concern.acknowledged?
|
|
527
|
+
raise Error::UnsupportedOption.hint_error(unacknowledged_write: true)
|
|
528
|
+
end
|
|
529
|
+
|
|
484
530
|
Operation::Update.new(
|
|
485
531
|
updates: [ update_doc ],
|
|
486
532
|
db_name: collection.database.name,
|
|
@@ -490,7 +536,54 @@ module Mongo
|
|
|
490
536
|
session: session,
|
|
491
537
|
txn_num: txn_num,
|
|
492
538
|
let: opts[:let],
|
|
493
|
-
|
|
539
|
+
comment: opts[:comment],
|
|
540
|
+
).execute_with_connection(connection, context: context)
|
|
541
|
+
end
|
|
542
|
+
end
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
private
|
|
546
|
+
|
|
547
|
+
# Checks the update documents to make sure they only have atomic modifiers.
|
|
548
|
+
# Note that as per the spec, we only have to examine the first element
|
|
549
|
+
# in the update document.
|
|
550
|
+
#
|
|
551
|
+
# @param [ Hash | Array<Hash> ] spec The update document or pipeline.
|
|
552
|
+
#
|
|
553
|
+
# @raise [ Error::InvalidUpdateDocument ] if the first key in the
|
|
554
|
+
# document does not start with a $.
|
|
555
|
+
def validate_update_documents!(spec)
|
|
556
|
+
if update = spec.is_a?(Array) ? spec&.first : spec
|
|
557
|
+
if key = update.keys&.first
|
|
558
|
+
unless key.to_s.start_with?("$")
|
|
559
|
+
if Mongo.validate_update_replace
|
|
560
|
+
raise Error::InvalidUpdateDocument.new(key: key)
|
|
561
|
+
else
|
|
562
|
+
Error::InvalidUpdateDocument.warn(Logger.logger, key)
|
|
563
|
+
end
|
|
564
|
+
end
|
|
565
|
+
end
|
|
566
|
+
end
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
# Check the replacement documents to make sure they don't have atomic
|
|
570
|
+
# modifiers. Note that as per the spec, we only have to examine the
|
|
571
|
+
# first element in the replacement document.
|
|
572
|
+
#
|
|
573
|
+
# @param [ Hash | Array<Hash> ] spec The replacement document or pipeline.
|
|
574
|
+
#
|
|
575
|
+
# @raise [ Error::InvalidUpdateDocument ] if the first key in the
|
|
576
|
+
# document does not start with a $.
|
|
577
|
+
def validate_replacement_documents!(spec)
|
|
578
|
+
if replace = spec.is_a?(Array) ? spec&.first : spec
|
|
579
|
+
if key = replace.keys&.first
|
|
580
|
+
if key.to_s.start_with?("$")
|
|
581
|
+
if Mongo.validate_update_replace
|
|
582
|
+
raise Error::InvalidReplacementDocument.new(key: key)
|
|
583
|
+
else
|
|
584
|
+
Error::InvalidReplacementDocument.warn(Logger.logger, key)
|
|
585
|
+
end
|
|
586
|
+
end
|
|
494
587
|
end
|
|
495
588
|
end
|
|
496
589
|
end
|
data/lib/mongo/collection.rb
CHANGED
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
|
|
18
18
|
require 'mongo/bulk_write'
|
|
19
19
|
require 'mongo/collection/view'
|
|
20
|
+
require 'mongo/collection/helpers'
|
|
21
|
+
require 'mongo/collection/queryable_encryption'
|
|
20
22
|
|
|
21
23
|
module Mongo
|
|
22
24
|
|
|
@@ -27,6 +29,8 @@ module Mongo
|
|
|
27
29
|
class Collection
|
|
28
30
|
extend Forwardable
|
|
29
31
|
include Retryable
|
|
32
|
+
include QueryableEncryption
|
|
33
|
+
include Helpers
|
|
30
34
|
|
|
31
35
|
# The capped option.
|
|
32
36
|
#
|
|
@@ -47,8 +51,8 @@ module Mongo
|
|
|
47
51
|
# @return [ Hash ] The collection options.
|
|
48
52
|
attr_reader :options
|
|
49
53
|
|
|
50
|
-
# Get client, cluster, read preference,
|
|
51
|
-
def_delegators :database, :client, :cluster
|
|
54
|
+
# Get client, cluster, read preference, write concern, and encrypted_fields_map from client.
|
|
55
|
+
def_delegators :database, :client, :cluster, :encrypted_fields_map
|
|
52
56
|
|
|
53
57
|
# Delegate to the cluster for the next primary.
|
|
54
58
|
def_delegators :cluster, :next_primary
|
|
@@ -58,10 +62,17 @@ module Mongo
|
|
|
58
62
|
# @since 2.1.0
|
|
59
63
|
CHANGEABLE_OPTIONS = [ :read, :read_concern, :write, :write_concern ].freeze
|
|
60
64
|
|
|
61
|
-
# Options
|
|
62
|
-
|
|
65
|
+
# Options map to transform create collection options.
|
|
66
|
+
#
|
|
67
|
+
# @api private
|
|
68
|
+
CREATE_COLLECTION_OPTIONS = {
|
|
63
69
|
:time_series => :timeseries,
|
|
64
|
-
:expire_after => :expireAfterSeconds
|
|
70
|
+
:expire_after => :expireAfterSeconds,
|
|
71
|
+
:clustered_index => :clusteredIndex,
|
|
72
|
+
:change_stream_pre_and_post_images => :changeStreamPreAndPostImages,
|
|
73
|
+
:encrypted_fields => :encryptedFields,
|
|
74
|
+
:validator => :validator,
|
|
75
|
+
:view_on => :viewOn
|
|
65
76
|
}
|
|
66
77
|
|
|
67
78
|
# Check if a collection is equal to another object. Will check the name and
|
|
@@ -94,10 +105,14 @@ module Mongo
|
|
|
94
105
|
# @option options [ Hash ] :write_concern The write concern options.
|
|
95
106
|
# Can be :w => Integer|String, :fsync => Boolean, :j => Boolean.
|
|
96
107
|
# @option options [ Hash ] :time_series Create a time-series collection.
|
|
97
|
-
# See https://
|
|
108
|
+
# See https://mongodb.com/docs/manual/core/timeseries-collections/ for more
|
|
98
109
|
# information about time-series collection.
|
|
99
110
|
# @option options [ Integer ] :expire_after Number indicating
|
|
100
111
|
# after how many seconds old time-series data should be deleted.
|
|
112
|
+
# @options clustered_index [ Hash ] :clustered_index Create a clustered index.
|
|
113
|
+
# This option specifies how this collection should be clustered on _id.
|
|
114
|
+
# See https://www.mongodb.com/docs/v5.3/reference/method/db.createCollection/#std-label-db.createCollection.clusteredIndex
|
|
115
|
+
# for more information about this option.
|
|
101
116
|
#
|
|
102
117
|
# @since 2.0.0
|
|
103
118
|
def initialize(database, name, options = {})
|
|
@@ -241,6 +256,12 @@ module Mongo
|
|
|
241
256
|
# @option opts [ Hash ] :time_series Create a time-series collection.
|
|
242
257
|
# @option opts [ Integer ] :expire_after Number indicating
|
|
243
258
|
# after how many seconds old time-series data should be deleted.
|
|
259
|
+
# @option opts [ Hash ] :change_stream_pre_and_post_images Used to enable
|
|
260
|
+
# pre- and post-images on the created collection.
|
|
261
|
+
# @option opts [ Hash ] :encrypted_fields Hash describing encrypted fields
|
|
262
|
+
# for queryable encryption.
|
|
263
|
+
# @option opts [ Hash ] :validator Hash describing document validation
|
|
264
|
+
# options for the collection.
|
|
244
265
|
#
|
|
245
266
|
# @return [ Result ] The result of the command.
|
|
246
267
|
#
|
|
@@ -253,9 +274,9 @@ module Mongo
|
|
|
253
274
|
options = Hash[self.options.reject do |key, value|
|
|
254
275
|
%w(read read_preference read_concern).include?(key.to_s)
|
|
255
276
|
end]
|
|
256
|
-
options.update(opts.slice(*
|
|
257
|
-
# Converting Ruby
|
|
258
|
-
|
|
277
|
+
options.update(opts.slice(*CREATE_COLLECTION_OPTIONS.keys))
|
|
278
|
+
# Converting Ruby options to server style.
|
|
279
|
+
CREATE_COLLECTION_OPTIONS.each do |ruby_key, server_key|
|
|
259
280
|
if options.key?(ruby_key)
|
|
260
281
|
options[server_key] = options.delete(ruby_key)
|
|
261
282
|
end
|
|
@@ -271,20 +292,24 @@ module Mongo
|
|
|
271
292
|
end
|
|
272
293
|
|
|
273
294
|
context = Operation::Context.new(client: client, session: session)
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
295
|
+
maybe_create_qe_collections(opts[:encrypted_fields], client, session) do |encrypted_fields|
|
|
296
|
+
Operation::Create.new(
|
|
297
|
+
selector: operation,
|
|
298
|
+
db_name: database.name,
|
|
299
|
+
write_concern: write_concern,
|
|
300
|
+
session: session,
|
|
301
|
+
# Note that these are collection options, collation isn't
|
|
302
|
+
# taken from options passed to the create method.
|
|
303
|
+
collation: options[:collation] || options['collation'],
|
|
304
|
+
encrypted_fields: encrypted_fields,
|
|
305
|
+
validator: options[:validator],
|
|
306
|
+
).execute(next_primary(nil, session), context: context)
|
|
307
|
+
end
|
|
283
308
|
end
|
|
284
309
|
end
|
|
285
310
|
|
|
286
311
|
# Drop the collection. Will also drop all indexes associated with the
|
|
287
|
-
# collection.
|
|
312
|
+
# collection, as well as associated queryable encryption collections.
|
|
288
313
|
#
|
|
289
314
|
# @note An error returned if the collection doesn't exist is suppressed.
|
|
290
315
|
#
|
|
@@ -301,25 +326,22 @@ module Mongo
|
|
|
301
326
|
# @since 2.0.0
|
|
302
327
|
def drop(opts = {})
|
|
303
328
|
client.send(:with_session, opts) do |session|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
329
|
+
maybe_drop_emm_collections(opts[:encrypted_fields], client, session) do
|
|
330
|
+
temp_write_concern = write_concern
|
|
331
|
+
write_concern = if opts[:write_concern]
|
|
332
|
+
WriteConcern.get(opts[:write_concern])
|
|
333
|
+
else
|
|
334
|
+
temp_write_concern
|
|
335
|
+
end
|
|
336
|
+
context = Operation::Context.new(client: client, session: session)
|
|
337
|
+
operation = Operation::Drop.new({
|
|
338
|
+
selector: { :drop => name },
|
|
339
|
+
db_name: database.name,
|
|
340
|
+
write_concern: write_concern,
|
|
341
|
+
session: session,
|
|
342
|
+
})
|
|
343
|
+
do_drop(operation, session, context)
|
|
309
344
|
end
|
|
310
|
-
Operation::Drop.new({
|
|
311
|
-
selector: { :drop => name },
|
|
312
|
-
db_name: database.name,
|
|
313
|
-
write_concern: write_concern,
|
|
314
|
-
session: session,
|
|
315
|
-
}).execute(next_primary(nil, session), context: Operation::Context.new(client: client, session: session))
|
|
316
|
-
end
|
|
317
|
-
rescue Error::OperationFailure => ex
|
|
318
|
-
# NamespaceNotFound
|
|
319
|
-
if ex.code == 26 || ex.code.nil? && ex.message =~ /ns not found/
|
|
320
|
-
false
|
|
321
|
-
else
|
|
322
|
-
raise
|
|
323
345
|
end
|
|
324
346
|
end
|
|
325
347
|
|
|
@@ -343,7 +365,8 @@ module Mongo
|
|
|
343
365
|
# @option options [ Integer ] :batch_size The number of documents returned in each batch
|
|
344
366
|
# of results from MongoDB.
|
|
345
367
|
# @option options [ Hash ] :collation The collation to use.
|
|
346
|
-
# @option options [
|
|
368
|
+
# @option options [ Object ] :comment A user-provided
|
|
369
|
+
# comment to attach to this command.
|
|
347
370
|
# @option options [ :tailable, :tailable_await ] :cursor_type The type of cursor to use.
|
|
348
371
|
# @option options [ Integer ] :limit The max number of docs to return from the query.
|
|
349
372
|
# @option options [ Integer ] :max_time_ms
|
|
@@ -386,7 +409,8 @@ module Mongo
|
|
|
386
409
|
# @option options [ true, false ] :bypass_document_validation Whether or
|
|
387
410
|
# not to skip document level validation.
|
|
388
411
|
# @option options [ Hash ] :collation The collation to use.
|
|
389
|
-
# @option options [
|
|
412
|
+
# @option options [ Object ] :comment A user-provided
|
|
413
|
+
# comment to attach to this command.
|
|
390
414
|
# @option options [ String ] :hint The index to use for the aggregation.
|
|
391
415
|
# @option options [ Hash ] :let Mapping of variables to use in the pipeline.
|
|
392
416
|
# See the server documentation for details.
|
|
@@ -416,11 +440,35 @@ module Mongo
|
|
|
416
440
|
# @param [ Array<Hash> ] pipeline Optional additional filter operators.
|
|
417
441
|
# @param [ Hash ] options The change stream options.
|
|
418
442
|
#
|
|
419
|
-
# @option options [ String ] :full_document Allowed values:
|
|
420
|
-
#
|
|
421
|
-
#
|
|
422
|
-
#
|
|
423
|
-
#
|
|
443
|
+
# @option options [ String ] :full_document Allowed values: nil, 'default',
|
|
444
|
+
# 'updateLookup', 'whenAvailable', 'required'.
|
|
445
|
+
#
|
|
446
|
+
# The default is to not send a value (i.e. nil), which is equivalent to
|
|
447
|
+
# 'default'. By default, the change notification for partial updates will
|
|
448
|
+
# include a delta describing the changes to the document.
|
|
449
|
+
#
|
|
450
|
+
# When set to 'updateLookup', the change notification for partial updates
|
|
451
|
+
# will include both a delta describing the changes to the document as well
|
|
452
|
+
# as a copy of the entire document that was changed from some time after
|
|
453
|
+
# the change occurred.
|
|
454
|
+
#
|
|
455
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
|
456
|
+
# post-image of the modified document for replace and update change events
|
|
457
|
+
# if the post-image for this event is available.
|
|
458
|
+
#
|
|
459
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
|
460
|
+
# an error is raised if the post-image is not available.
|
|
461
|
+
# @option options [ String ] :full_document_before_change Allowed values: nil,
|
|
462
|
+
# 'whenAvailable', 'required', 'off'.
|
|
463
|
+
#
|
|
464
|
+
# The default is to not send a value (i.e. nil), which is equivalent to 'off'.
|
|
465
|
+
#
|
|
466
|
+
# When set to 'whenAvailable', configures the change stream to return the
|
|
467
|
+
# pre-image of the modified document for replace, update, and delete change
|
|
468
|
+
# events if it is available.
|
|
469
|
+
#
|
|
470
|
+
# When set to 'required', the same behavior as 'whenAvailable' except that
|
|
471
|
+
# an error is raised if the pre-image is not available.
|
|
424
472
|
# @option options [ BSON::Document, Hash ] :resume_after Specifies the
|
|
425
473
|
# logical starting point for the new change stream.
|
|
426
474
|
# @option options [ Integer ] :max_await_time_ms The maximum amount of time
|
|
@@ -433,6 +481,13 @@ module Mongo
|
|
|
433
481
|
# changes that occurred at or after the specified timestamp. Any command run
|
|
434
482
|
# against the server will return a cluster time that can be used here.
|
|
435
483
|
# Only recognized by server versions 4.0+.
|
|
484
|
+
# @option options [ Object ] :comment A user-provided
|
|
485
|
+
# comment to attach to this command.
|
|
486
|
+
# @option options [ Boolean ] :show_expanded_events Enables the server to
|
|
487
|
+
# send the 'expanded' list of change stream events. The list of additional
|
|
488
|
+
# events included with this flag set are: createIndexes, dropIndexes,
|
|
489
|
+
# modify, create, shardCollection, reshardCollection,
|
|
490
|
+
# refineCollectionShardKey.
|
|
436
491
|
#
|
|
437
492
|
# @note A change stream only allows 'majority' read concern.
|
|
438
493
|
# @note This helper method is preferable to running a raw aggregation with
|
|
@@ -442,7 +497,9 @@ module Mongo
|
|
|
442
497
|
#
|
|
443
498
|
# @since 2.5.0
|
|
444
499
|
def watch(pipeline = [], options = {})
|
|
445
|
-
|
|
500
|
+
view_options = options.dup
|
|
501
|
+
view_options[:await_data] = true if options[:max_await_time_ms]
|
|
502
|
+
View::ChangeStream.new(View.new(self, {}, view_options), pipeline, nil, options)
|
|
446
503
|
end
|
|
447
504
|
|
|
448
505
|
# Gets an estimated number of matching documents in the collection.
|
|
@@ -460,6 +517,8 @@ module Mongo
|
|
|
460
517
|
# @option options [ Hash ] :read The read preference options.
|
|
461
518
|
# @option options [ Hash ] :collation The collation to use.
|
|
462
519
|
# @option options [ Session ] :session The session to use.
|
|
520
|
+
# @option options [ Object ] :comment A user-provided
|
|
521
|
+
# comment to attach to this command.
|
|
463
522
|
#
|
|
464
523
|
# @return [ Integer ] The document count.
|
|
465
524
|
#
|
|
@@ -493,6 +552,9 @@ module Mongo
|
|
|
493
552
|
# command to run.
|
|
494
553
|
# @option options :read [ Hash ] The read preference options.
|
|
495
554
|
# @option options :collation [ Hash ] The collation to use.
|
|
555
|
+
# @option options [ Session ] :session The session to use.
|
|
556
|
+
# @option options [ Object ] :comment A user-provided
|
|
557
|
+
# comment to attach to this command.
|
|
496
558
|
#
|
|
497
559
|
# @return [ Integer ] The document count.
|
|
498
560
|
#
|
|
@@ -509,9 +571,11 @@ module Mongo
|
|
|
509
571
|
#
|
|
510
572
|
# @param [ Hash ] options Options for the operation.
|
|
511
573
|
#
|
|
512
|
-
# @option
|
|
574
|
+
# @option options :max_time_ms [ Integer ] The maximum amount of time to allow
|
|
513
575
|
# the command to run for on the server.
|
|
514
|
-
# @option
|
|
576
|
+
# @option options [ Hash ] :read The read preference options.
|
|
577
|
+
# @option options [ Object ] :comment A user-provided
|
|
578
|
+
# comment to attach to this command.
|
|
515
579
|
#
|
|
516
580
|
# @return [ Integer ] The document count.
|
|
517
581
|
#
|
|
@@ -597,7 +661,8 @@ module Mongo
|
|
|
597
661
|
raise ArgumentError, "Document to be inserted cannot be nil"
|
|
598
662
|
end
|
|
599
663
|
|
|
600
|
-
|
|
664
|
+
context = Operation::Context.new(client: client, session: session)
|
|
665
|
+
write_with_retry(write_concern, context: context) do |connection, txn_num, context|
|
|
601
666
|
Operation::Insert.new(
|
|
602
667
|
:documents => [ document ],
|
|
603
668
|
:db_name => database.name,
|
|
@@ -608,7 +673,8 @@ module Mongo
|
|
|
608
673
|
:id_generator => client.options[:id_generator],
|
|
609
674
|
:session => session,
|
|
610
675
|
:txn_num => txn_num,
|
|
611
|
-
|
|
676
|
+
:comment => opts[:comment]
|
|
677
|
+
).execute_with_connection(connection, context: context)
|
|
612
678
|
end
|
|
613
679
|
end
|
|
614
680
|
end
|
|
@@ -650,6 +716,8 @@ module Mongo
|
|
|
650
716
|
# @option options [ true, false ] :bypass_document_validation Whether or
|
|
651
717
|
# not to skip document level validation.
|
|
652
718
|
# @option options [ Session ] :session The session to use for the set of operations.
|
|
719
|
+
# @option options [ Hash ] :let Mapping of variables to use in the command.
|
|
720
|
+
# See the server documentation for details.
|
|
653
721
|
#
|
|
654
722
|
# @return [ BulkWrite::Result ] The result of the operation.
|
|
655
723
|
#
|