Details
-
Task
-
Resolution: Done
-
Major - P3
-
None
-
2.5
-
None
Description
Hello.
I have a mongodb replicaset cluster with 3 members.
Using shell I can test bulkwrite operation, which works fine
use admin
|
db.auth("SportsEtl", "<some password>") // returns 1 (OK)
|
|
|
use SomeTestDb
|
db.Markets.bulkWrite([
|
{ replaceOne :
|
{
|
"filter" : {_id:"4"},
|
"replacement" : { _id:"4", item: "text", defaultQty: 100, status: "A", points: 100 },
|
"upsert" : true
|
}
|
}
|
],
|
{ ordered : true }
|
)
|
|
|
Returns "acknowledged" : true, an rest of payload.
|
Now I'm trying to do the same with C# driver
This is my connection string
mongodb://SportsEtl:<some password>@server1:27018,server2:27018,server3:27018/admin?AUTHMechanism=SCRAM-SHA-1
Initialization
var mongoConfig = MongoClientSettings.FromUrl(new MongoUrl(mongoUrl));
|
var mongoClient = new MongoClient(mongoConfig);
|
var db = mongoClient.GetDatabase("SomeTestDb");
|
Code that works fine
_appMetadataCollection = db.GetCollection<AppMetadata>("AppMetadata");
|
public void UpdateAppMetadata(AppMetadata appMetadata)
|
{
|
_appMetadataCollection.DeleteMany(FilterDefinition<AppMetadata>.Empty);
|
_appMetadataCollection.InsertOne(appMetadata);
|
}
|
Code that fails
static readonly BulkWriteOptions _bulkWriteOptions = new BulkWriteOptions { IsOrdered = true, BypassDocumentValidation = true };
|
_marketsCollection = db.GetCollection<Dto.Market>("Markets");
|
|
|
public void UpdateMarkets(List<Dto.Market> marketsBatch)
|
{
|
var models = marketsBatch
|
.Select(m => new ReplaceOneModel<Dto.Market>(new BsonDocument("_id", m.Id), m) {IsUpsert = true})
|
.ToList();
|
|
|
_marketsCollection.BulkWrite(models, _bulkWriteOptions);
|
}
|
Exception message:
MongoDB.Driver.MongoCommandException: Command update failed: not authorized on SomeTestDb to execute command { update: \"Markets\", ordered: true, bypassDocumentValidation: true, $db: \"SomeTestDb\" }.
|
at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.ProcessReply(ConnectionId connectionId, ReplyMessage`1 reply)
|
at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.Execute(IConnection connection, CancellationToken cancellationToken)
|
at MongoDB.Driver.Core.Servers.Server.ServerChannel.ExecuteProtocol[TResult](IWireProtocol`1 protocol, CancellationToken cancellationToken)
|
at MongoDB.Driver.Core.Servers.Server.ServerChannel.Command[TResult](DatabaseNamespace databaseNamespace, BsonDocument command, IElementNameValidator commandValidator, Func`1 responseHandling, Boolean slaveOk, IBsonSerializer`1 resultSerializer, MessageEncoderSettings messageEncoderSettings, CancellationToken cancellationToken)
|
at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase.ExecuteProtocol(IChannelHandle channel, BsonDocument command, Func`1 responseHandling, CancellationToken cancellationToken)
|
at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase.ExecuteBatch(IChannelHandle channel, BatchableSource`1 requestSource, Int32 originalIndex, CancellationToken cancellationToken)
|
at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase.ExecuteBatches(IChannelHandle channel, CancellationToken cancellationToken)
|
at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase.Execute(IChannelHandle channel, CancellationToken cancellationToken)
|
at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.ExecuteBatch(IChannelHandle channel, Run run, Boolean isLast, CancellationToken cancellationToken)
|
at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.Execute(IWriteBinding binding, CancellationToken cancellationToken)
|
at MongoDB.Driver.OperationExecutor.ExecuteWriteOperation[TResult](IWriteBinding binding, IWriteOperation`1 operation, CancellationToken cancellationToken)
|
at MongoDB.Driver.MongoCollectionImpl`1.ExecuteWriteOperation[TResult](IWriteOperation`1 operation, CancellationToken cancellationToken)
|
at MongoDB.Driver.MongoCollectionImpl`1.BulkWrite(IEnumerable`1 requests, BulkWriteOptions options, CancellationToken cancellationToken)
|
<my project stack goes here>
|
;
|
Please suggest what's going - why auth works fine for insert, delete and update but fails for bulk. How can I fix that.
Thanks.