Удаление документов

Последнее обновление: 29.10.2022

Для удаления документов применяются методы 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; }
}

FindOneAndDeleteAsync

Дополнительно для удаления одного объекта можно применять методы 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}");
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850