Fix Client.BulkWrite failure in case complex type is being used as Document's Id

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Unresolved
    • Priority: Major - P3
    • 3.5.0
    • Affects Version/s: None
    • Component/s: None
    • None
    • None
    • Fully Compatible
    • Dotnet Drivers
    • Not Needed
    • Hide

      1. What would you like to communicate to the user about this feature?
      2. Would you like the user to see examples of the syntax and/or executable code and its output?
      3. Which versions of the driver/connector does this apply to?

      Show
      1. What would you like to communicate to the user about this feature? 2. Would you like the user to see examples of the syntax and/or executable code and its output? 3. Which versions of the driver/connector does this apply to?
    • None
    • None
    • None
    • None
    • None
    • None

      In case Document has Id of type that is not mapped to BsonValue, client.BulkWrite operation fails with the following error message:

      MongoDB.Driver.ClientBulkWriteException: An error occurred during bulkWrite operation. See InnerException for more details.
       ---> System.ArgumentException: .NET type ExampleId cannot be mapped to a BsonValue.
         at MongoDB.Bson.BsonTypeMapper.MapToBsonValue(Object value)
         at MongoDB.Bson.BsonValue.Create(Object value)
         at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.ClientBulkWriteOpsSectionFormatter.RenderInsertOne[TDocument](RenderArgs`1 renderArgs, BsonSerializationContext serializationContext, BulkWriteInsertOneModel`1 model)
         at MongoDB.Driver.BulkWriteInsertOneModel`1.Render(RenderArgs`1 renderArgs, BsonSerializationContext serializationContext, IBulkWriteModelRenderer renderer)
         at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.ClientBulkWriteOpsSectionFormatter.FormatSection(ClientBulkWriteOpsCommandMessageSection section, IBsonWriter writer)
         at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.CommandMessageBinaryEncoder.WriteSection(BsonBinaryWriter writer, CommandMessageSection section, Int64 messageStartPosition)
         at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.CommandMessageBinaryEncoder.WriteSections(BsonBinaryWriter writer, IEnumerable`1 sections, Int64 messageStartPosition)
         at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.CommandMessageBinaryEncoder.WriteMessage(CommandMessage message)
         at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.CommandRequestMessageBinaryEncoder.WriteMessage(CommandRequestMessage message)
         at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.CommandRequestMessageBinaryEncoder.MongoDB.Driver.Core.WireProtocol.Messages.Encoders.IMessageEncoder.WriteMessage(MongoDBMessage message)
         at MongoDB.Driver.Core.Connections.BinaryConnection.SendMessagesHelper.EncodeMessages(CancellationToken cancellationToken, List`1& sentMessages)
         at MongoDB.Driver.Core.Connections.BinaryConnection.SendMessagesAsync(IEnumerable`1 messages, MessageEncoderSettings messageEncoderSettings, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.ConnectionPools.ExclusiveConnectionPool.PooledConnection.SendMessagesAsync(IEnumerable`1 messages, MessageEncoderSettings messageEncoderSettings, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.WireProtocol.CommandUsingCommandMessageWireProtocol`1.SendMessageAndProcessResponseAsync(CommandRequestMessage message, Int32 responseTo, IConnection connection, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.WireProtocol.CommandUsingCommandMessageWireProtocol`1.ExecuteAsync(IConnection connection, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Servers.Server.ServerChannel.ExecuteProtocolAsync[TResult](IWireProtocol`1 protocol, ICoreSession session, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Operations.RetryableWriteOperationExecutor.ExecuteAsync[TResult](IRetryableWriteOperation`1 operation, RetryableWriteContext context, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Operations.ClientBulkWriteOperation.ExecuteAsync(IWriteBinding binding, CancellationToken cancellationToken)
         --- End of inner exception stack trace ---
         at MongoDB.Driver.Core.Operations.ClientBulkWriteOperation.EnsureCanProceedNextBatch(ConnectionId connectionId, BulkWriteRawResult bulkWriteResult)
         at MongoDB.Driver.Core.Operations.ClientBulkWriteOperation.ExecuteAsync(IWriteBinding binding, CancellationToken cancellationToken)
         at MongoDB.Driver.OperationExecutor.ExecuteWriteOperationAsync[TResult](IWriteBinding binding, IWriteOperation`1 operation, CancellationToken cancellationToken)
         at MongoDB.Driver.MongoClient.ExecuteWriteOperationAsync[TResult](IClientSessionHandle session, IWriteOperation`1 operation, CancellationToken cancellationToken)
         at Program.<Main>$(String[] args) in C:\work\code\experiments\MongoBulkWrite\MongoBulkWrite.ApiService\Program.cs:line 24
         at Program.<Main>(String[] args)

              Assignee:
              Oleksandr Poliakov
              Reporter:
              Oleksandr Poliakov
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated: