using MongoDB.Bson.Serialization; using MongoDB.Bson; using MongoDB.Driver; using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using System.Threading; namespace MongoDb.Ado.data { public class BulkWriteHandlerAsync : IMongoOperationHandlerAsync { public CancellationToken token { get; set; } public string operation { get; set; } public async Task HandleAsync(IMongoCollection collection, string json) { var documents = ParseJsonArray(json); var bulkOps = new List>(); foreach (var doc in documents) { var filter = doc["filter"].AsBsonDocument; var update = doc["update"].AsBsonDocument; var op = new UpdateManyModel(filter, update); bulkOps.Add(op); } var result =await collection.BulkWriteAsync(bulkOps); return (int)result.ModifiedCount; } private List ParseJsonArray(string json) { if (json.TrimStart().StartsWith("[")) return BsonSerializer.Deserialize>(json); return new List { BsonDocument.Parse(json) }; } } }