MongoDB C# docs
GitHub.NET DriverMongoDB docs
  • ⭐Introduction
  • πŸ“ŒGetting started
    • Environment setup
    • πŸƒβ€β™‚οΈ Quick start
      • MongoDB connection
      • Databases
      • Collections
      • Insert documents
      • Read documents
      • Update documents
  • πŸ“‘CRUD Basics
    • βž•Create
      • Id Member
      • Ordered insert
    • πŸ”ŽRead
      • Basics
      • Comparison Operators
      • Logical Operators
      • Element Operators
      • Array operators
      • Evaluation Operators
    • πŸ“Update
      • Operators
      • Replace
      • Arrays
    • ❌Delete
  • πŸ§ͺAggregation
    • Overview
    • βœ‚οΈProject
    • 🎯Match
    • πŸ“¦Group
    • 🚩Unwind
    • ⏩Pagination
    • πŸ“ˆBucket
    • ✨Operators
Powered by GitBook
On this page
  • Delete one document
  • Delete the first document in the collection
  • Delete multiple documents
  • Delete all documents
  1. CRUD Basics

Delete

PreviousArraysNextOverview

Last updated 5 years ago

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.

DeleteDocuments.cs
// 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");
}
// get a collection reference
var bsonPersonCollection = usersDatabase
    .GetCollection<BsonDocument>(Constants.UsersCollection);
    
// find a person using a greater than filter on its salary field
var bsonSingleFilter = Builders<BsonDocument>.Filter.Gt("salary", 2000);

// delete the first person that fulfills the filter criteria
var bsonPersonDeleteResult = await bsonPersonCollection
    .DeleteOneAsync(bsonSingleFilter);
// delete a single document
db.users.deleteOne({ _id : ObjectId("5e5ff25170dc588dd0870073")})

----------------------
// sample result
{
	"acknowledged" : true,
	"deletedCount" : 1
}
public class User
{
    [BsonId]
    [BsonIgnoreIfDefault] // required for replace documents 
    public ObjectId Id { get; set; }
    public Gender Gender { get; set; }
    public string FirstName {get; set; }
    public string LastName {get; set; }
    public string UserName {get; set; }
    public string Avatar {get; set; }
    public string Email {get; set; }
    public DateTime DateOfBirth {get; set; }
    public AddressCard Address {get; set; }
    public string Phone {get; set; }
    
    [BsonIgnoreIfDefault]
    public string Website {get; set; }
    public CompanyCard Company {get; set; }
    public decimal Salary { get; set; }
    public int MonthlyExpenses { get; set; }
    public List<string> FavoriteSports { get; set; }
    public string Profession { get; set; }
}
  • When your filter criteria matches more the one document, the first document that matches the filter will be removed

  • Use a field that is 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.

DeleteDocuments.cs
// 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);
// get a collection reference
var bsonPersonCollection = usersDatabase
    .GetCollection<BsonDocument>(Constants.UsersCollection);

// create an empty filter
var bsonEmptyFilter = Builders<BsonDocument>.Filter.Empty;

// delete the first document in the collection
var bsonFirstPersonDeleteResult = await bsonPersonCollection
    .DeleteOneAsync(bsonEmptyFilter);
// delete the first document in the collection
db.users.deleteOne({})
public class User
{
    [BsonId]
    [BsonIgnoreIfDefault] // required for replace documents 
    public ObjectId Id { get; set; }
    public Gender Gender { get; set; }
    public string FirstName {get; set; }
    public string LastName {get; set; }
    public string UserName {get; set; }
    public string Avatar {get; set; }
    public string Email {get; set; }
    public DateTime DateOfBirth {get; set; }
    public AddressCard Address {get; set; }
    public string Phone {get; set; }
    
    [BsonIgnoreIfDefault]
    public string Website {get; set; }
    public CompanyCard Company {get; set; }
    public decimal Salary { get; set; }
    public int MonthlyExpenses { get; set; }
    public List<string> FavoriteSports { get; set; }
    public string Profession { get; set; }
}

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 .

DeleteDocuments.cs
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");
}
var bsonPersonCollection = usersDatabase
    .GetCollection<BsonDocument>(Constants.UsersCollection);
    
// find all users with salary > 2000
var bsonSingleFilter = Builders<BsonDocument>.Filter.Gt("salary", 2000);

// delete the matched documents
var bsonPersonsDeleteResult = await bsonPersonCollection
            .DeleteManyAsync(bsonSingleFilter);
// delete multiple documents
db.users.deleteMany(
    { $and: [{ salary: { $gt: 1200} }, {salary: { $lt: 3500} }] }
)

-----------------------

// sample result
{
	"acknowledged" : true,
	"deletedCount" : 15
}
public class User
{
    [BsonId]
    [BsonIgnoreIfDefault] // required for replace documents 
    public ObjectId Id { get; set; }
    public Gender Gender { get; set; }
    public string FirstName {get; set; }
    public string LastName {get; set; }
    public string UserName {get; set; }
    public string Avatar {get; set; }
    public string Email {get; set; }
    public DateTime DateOfBirth {get; set; }
    public AddressCard Address {get; set; }
    public string Phone {get; set; }
    
    [BsonIgnoreIfDefault]
    public string Website {get; set; }
    public CompanyCard Company {get; set; }
    public decimal Salary { get; set; }
    public int MonthlyExpenses { get; set; }
    public List<string> FavoriteSports { get; set; }
    public string Profession { get; set; }
}

Delete all documents

await personsCollection
    .DeleteManyAsync(Builders<User>.Filter.Empty);

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 it.

πŸ“‘
❌
unique
drop