Deleting Documents

Last updated on

Deleting records in MongoDB is a common task. You might need to clear old data, remove outdated entries, or handle sensitive information for compliance. Let's go step by step to see how you can delete documents from MongoDB using PHP.

Deleting a Single Document

Sometimes, you only need to delete a specific document. For instance, let's say you want to delete a user with a specific email address. Here is how you can do it:

$deleteResult = $collection->deleteOne([
    'email' => 'user@example.com'
]);

echo "Deleted " . $deleteResult->getDeletedCount() . " document(s).";

In this example:

  • The deleteOne method is used to delete the first document matching the query.
  • The query specifies the criteria for deletion (email => 'user@example.com').
  • The getDeletedCount method returns the number of documents deleted.

Anyway, in the following section, you will learn how to delete multiple documents in MongoDB in PHP.

Deleting Multiple Documents

If you need to delete more than one document, such as all users who have been inactive for over a year, you can use the deleteMany method. Here is an example:

$deleteResult = $collection->deleteMany([
    'last_active' => [
        '$lt' => new MongoDB\BSON\UTCDateTime(strtotime('-1 year') * 1000)
    ]
]);

echo "Deleted " . $deleteResult->getDeletedCount() . " document(s).";

Here is the explanation for the above code:

  • The deleteMany method deletes all documents matching the query.
  • The query uses the $lt operator to find documents where last_active is earlier than one year ago.

Deleting documents may not always go smoothly. You need to handle potential errors. For instance, there could be connection issues or invalid queries. Here is how you can handle errors:

try {
    $deleteResult = $collection->deleteOne([
        'email' => 'nonexistent@example.com'
    ]);

    if ($deleteResult->getDeletedCount() === 0) {
        echo "No documents matched the criteria.";
    } else {
        echo "Deleted " . $deleteResult->getDeletedCount() . " document(s).";
    }
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

This ensures that your script does not crash and provides feedback when no documents match the deletion criteria.

Let's summarize it.

Wrapping Up

Here are the main points covered in this article about deleting documents in MongoDB using PHP:

  1. Deleting a Single Document:You can use the deleteOne method to remove the first document that matches a given condition, such as deleting a user with a specific email address.
  2. Deleting Multiple Documents:The deleteMany method allows you to remove all documents that match a query. This is useful for tasks like cleaning up records based on time or other criteria.
  3. Error Handling:Always handle potential errors, such as connection issues or invalid queries, to ensure your application runs smoothly and provides helpful feedback to users.

Thanks for reading all the way through! If you are ready to keep learning, check out the complete PHP tutorial collection. Happy coding!

Frequently Asked Questions (FAQs)

  • What is the purpose of deleting documents in MongoDB?

    Deleting documents helps clean up outdated data, remove unnecessary records, or handle sensitive information for compliance.
  • How can I delete a single document in MongoDB using PHP?

    Use the deleteOne method with a query specifying the condition. Example:
    $deleteResult = $collection->deleteOne(['email' => 'user@example.com']);  
       echo "Deleted " . $deleteResult->getDeletedCount() . " document(s).";  
       
  • How can I delete multiple documents in MongoDB using PHP?

    Use the deleteMany method to remove all documents matching a query. Example:
    $deleteResult = $collection->deleteMany(['status' => 'inactive']);  
       echo "Deleted " . $deleteResult->getDeletedCount() . " document(s).";  
       
  • What happens if no document matches the query during deletion?

    The deletion count will be zero, and no document will be removed. Use error handling to provide feedback.
  • How can I handle errors during the deletion process?

    Wrap the deletion code in a try-catch block to catch exceptions and provide meaningful messages. Example:
    try {  
           $deleteResult = $collection->deleteOne(['email' => 'nonexistent@example.com']);  
           if ($deleteResult->getDeletedCount() === 0) {  
               echo "No documents matched the criteria.";  
           } else {  
               echo "Deleted " . $deleteResult->getDeletedCount() . " document(s).";  
           }  
       } catch (Exception $e) {  
           echo "Error: " . $e->getMessage();  
       }  
       
Share on: