Delete
Delete one document
To delete a single document, create a filter definition that matches the document you want to remove and call the DeleteOne
method on a IMongoCollection<T>
reference.
IMongoCollection<T>
.DeleteOne(<filter>)
The samples filter a User
document by its Id and removes it from the collection.
// get a collection reference
var personsCollection = usersDatabase
.GetCollection<User>(Constants.UsersCollection);
// find a person using an equality filter on its id
var filter = Builders<User>.Filter.Eq(person => person.Id, appPerson.Id);
// delete the person
var personDeleteResult = await personsCollection.DeleteOneAsync(filter);
if (personDeleteResult.DeletedCount == 1)
{
Utils.Log($"Document {appPerson.Id} deleted");
}
When your filter criteria matches more the one document, the first document that matches the filter will be removed
Use a field that is unique across a single collection to be more precise
Delete the first document in the collection
To delete the first document in the collection, simply use an empty filter definition.
// get a collection reference
var personsCollection = usersDatabase
.GetCollection<User>(Constants.UsersCollection);
// create an empty filter definition
var emptyFilter = Builders<User>.Filter.Empty;
// delete the first document in the collection
var firstPersonDeleteResult = await personsCollection
.DeleteOneAsync(emptyFilter);
Delete multiple documents
To remove more that one documents at the same time, create a filter definition to match the documents you wish to delete and use the DeleteMany
method on an IMongoCollection<T>
.
Syntax:
IMongoCollection<T>.DeleteMany(<filter>)
IMongoCollection<T>
.DeleteMany(<filter>)
The following example shows how to delete user documents based on the salary field .
var personsCollection = usersDatabase
.GetCollection<User>(Constants.UsersCollection);
// create a filter
var salaryFilter = Builders<User>.Filter
.And(
Builders<User>.Filter.Gt(person => person.Salary, 1200),
Builders<User>.Filter.Lt(person => person.Salary, 3500)
);
// for demonstration only - just to validate the total documents removed
var totalPersons = await personsCollection
.Find(salaryFilter).CountDocumentsAsync();
// delete the documents
var personsDeleteResult = await personsCollection.DeleteManyAsync(salaryFilter);
if (personsDeleteResult.DeletedCount.Equals(totalPersons))
{
Utils.Log($"{totalPersons} users deleted");
}
Delete all documents
To delete all documents in a collection, you can use the DeleteMany
method with an empty filter. If you want though to clear the entire collection, it's faster to just drop it.
await personsCollection
.DeleteManyAsync(Builders<User>.Filter.Empty);
Last updated