Для удаления документов применяются методы DeleteOne()/DeleteOneAsync() и DeleteMany()/DeleteManyAsync(), определенные в интерфейсе IMongoCollection. В качестве параметра они принимают фильтр, который определяет документ для удаления.
Метод DeleteOne()/DeleteOneAsync() удаляет один документ. Например, удалим документ, где "Name" = "Sam":
using MongoDB.Bson; using MongoDB.Driver; MongoClient client = new MongoClient("mongodb://localhost:27017"); var db = client.GetDatabase("test"); var collection = db.GetCollection<BsonDocument>("users"); // удаляем документ с Name="Sam" var result = await collection.DeleteOneAsync(new BsonDocument("Name", "Sam")); Console.WriteLine($"Удалено документов: {result.DeletedCount}"); var users = await collection.Find("{}").ToListAsync(); foreach (var user in users) Console.WriteLine(user);
Методы DeleteOne()/DeleteOneAsync()/DeleteMany()/DeleteManyAsync()
возвращают объект DeleteResult
, в котором с помощью свойства
DeletedCount
можно узнать количество удаленных документов.
Методы DeleteMany()/DeleteManyAsync()
работают аналогично, только удаляют все документы, который соответствуют фильтру:
using MongoDB.Bson; using MongoDB.Driver; MongoClient client = new MongoClient("mongodb://localhost:27017"); var db = client.GetDatabase("test"); var collection = db.GetCollection<BsonDocument>("users"); // удаляем все документы с Name="Tom" var result = await collection.DeleteManyAsync(new BsonDocument("Name", "Tom")); Console.WriteLine($"Удалено документов: {result.DeletedCount}"); var users = await collection.Find("{}").ToListAsync(); foreach (var user in users) Console.WriteLine(user);
Работа с POCO-классами будет аналогична работе с BsonDocument. Например, пусть документы представлены классом Person:
using MongoDB.Bson; using MongoDB.Driver; MongoClient client = new MongoClient("mongodb://localhost:27017"); var db = client.GetDatabase("test"); var collection = db.GetCollection<Person>("users"); // удаляем все документы с Name="Bob" var result = await collection.DeleteManyAsync(p=>p.Name == "Bob"); Console.WriteLine($"Удалено документов: {result.DeletedCount}"); var users = await collection.Find("{}").ToListAsync(); foreach (var user in users) Console.WriteLine(user.Name); class Person { public ObjectId Id { get; set; } public string Name { get; set; } = ""; public int Age { get; set; } public List<string>? Languages { get; set; } }
Дополнительно для удаления одного объекта можно применять методы FindOneAndDelete()/FindOneAndDeleteAsync(). Они принимают как минимум один параметр - фильтр документов для удаления. И, документ для удаления найден, удаляют его и возвращают в качестве результата. Если документ не найден, то возвращается null.
using MongoDB.Bson; using MongoDB.Driver; MongoClient client = new MongoClient("mongodb://localhost:27017"); var db = client.GetDatabase("test"); var collection = db.GetCollection<BsonDocument>("users"); var result = await collection.FindOneAndDeleteAsync(new BsonDocument("Name", "Tom")); if(result == null) Console.WriteLine("Документы не найдены"); else Console.WriteLine($"Удален документ: {result}");