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

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Fixed
    • Priority: Major - P3
    • 3.4.3
    • Affects Version/s: None
    • Component/s: None
    • None
    • None
    • Fully Compatible
    • Dotnet Drivers
    • Not Needed
    • 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:
              Resolved: