Cloud Firestore থেকে ডেটা মুছে ফেলা

নিম্নলিখিত উদাহরণগুলি দেখায় যে কীভাবে ডকুমেন্ট, ফিল্ড এবং কালেকশন মুছে ফেলতে হয়।

AI-এর মাধ্যমে সহায়তা পেতে, নিচের প্রম্পটটি আপনার AI কোডিং এজেন্টে (যেমন, Android Studio-তে Gemini, Antigravity, Claude Code, Codex এবং Cursor) কপি করুন। আপনি প্রম্পট কাস্টমাইজ করতে এবং আপনার এজেন্টের সাথে আইটারেট করতে পারবেন। ইনস্টলেশন সংক্রান্ত বিস্তারিত তথ্যের জন্য Firebase এজেন্ট সংক্রান্ত দক্ষতা দেখুন।

Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me delete documents, fields, and collections from Cloud Firestore in my app.

ডকুমেন্ট মুছুন

কোনও ডকুমেন্ট মুছে ফেলতে, নিম্নলিখিত ভাষা-নির্দিষ্ট delete() পদ্ধতি ব্যবহার করুন:

Web

deleteDoc() পদ্ধতি ব্যবহার করুন:

import { doc, deleteDoc } from "firebase/firestore";

await deleteDoc(doc(db, "cities", "DC"));

Web

delete() পদ্ধতি ব্যবহার করুন:

db.collection("cities").doc("DC").delete().then(() => {
    console.log("Document successfully deleted!");
}).catch((error) => {
    console.error("Error removing document: ", error);
});
Swift

delete() পদ্ধতি ব্যবহার করুন:

মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
do {
  try await db.collection("cities").document("DC").delete()
  print("Document successfully removed!")
} catch {
  print("Error removing document: \(error)")
}
Objective-C

deleteDocumentWithCompletion: পদ্ধতি ব্যবহার করুন:

মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
[[[self.db collectionWithPath:@"cities"] documentWithPath:@"DC"]
    deleteDocumentWithCompletion:^(NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error removing document: %@", error);
      } else {
        NSLog(@"Document successfully removed!");
      }
}];

Kotlin

delete() পদ্ধতি ব্যবহার করুন:

db.collection("cities").document("DC")
    .delete()
    .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully deleted!") }
    .addOnFailureListener { e -> Log.w(TAG, "Error deleting document", e) }

Java

delete() পদ্ধতি ব্যবহার করুন:

db.collection("cities").document("DC")
        .delete()
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                Log.d(TAG, "DocumentSnapshot successfully deleted!");
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error deleting document", e);
            }
        });

Dart

delete() পদ্ধতি ব্যবহার করুন:

db.collection("cities").doc("DC").delete().then(
      (doc) => print("Document deleted"),
      onError: (e) => print("Error updating document $e"),
    );
জাভা

delete() পদ্ধতি ব্যবহার করুন:

// asynchronously delete a document
ApiFuture<WriteResult> writeResult = db.collection("cities").document("DC").delete();
// ...
System.out.println("Update time : " + writeResult.get().getUpdateTime());
Python

delete() পদ্ধতি ব্যবহার করুন:

db.collection("cities").document("DC").delete()

Python

delete() পদ্ধতি ব্যবহার করুন:

await db.collection("cities").document("DC").delete()
C++

Delete() পদ্ধতি ব্যবহার করুন:

db->Collection("cities").Document("DC").Delete().OnCompletion(
    [](const Future<void>& future) {
      if (future.error() == Error::kErrorOk) {
        std::cout << "DocumentSnapshot successfully deleted!" << std::endl;
      } else {
        std::cout << "Error deleting document: " << future.error_message()
                  << std::endl;
      }
    });
Node.js

delete() পদ্ধতি ব্যবহার করুন:

const res = await db.collection('cities').doc('DC').delete();
Go

Delete() পদ্ধতি ব্যবহার করুন:


import (
	"context"
	"log"

	"cloud.google.com/go/firestore"
)

func deleteDoc(ctx context.Context, client *firestore.Client) error {
	_, err := client.Collection("cities").Doc("DC").Delete(ctx)
	if err != nil {
		// Handle any errors in an appropriate way, such as returning them.
		log.Printf("An error has occurred: %s", err)
	}

	return err
}
PHP

delete() পদ্ধতি ব্যবহার করুন:

$db->collection('samples/php/cities')->document('DC')->delete();
Unity

DeleteAsync() পদ্ধতি ব্যবহার করুন:

DocumentReference cityRef = db.Collection("cities").Document("DC");
cityRef.DeleteAsync();
C#

DeleteAsync() পদ্ধতি ব্যবহার করুন:

DocumentReference cityRef = db.Collection("cities").Document("DC");
await cityRef.DeleteAsync();
Ruby

delete() পদ্ধতি ব্যবহার করুন:

city_ref = firestore.doc "#{collection_path}/DC"
city_ref.delete

আপনি কোনও ডকুমেন্ট মুছে দিলে, Cloud Firestore অটোমেটিক তার সাবকালেকশনের মধ্যে থাকা ডকুমেন্ট মুছে দেয় না। আপনি এখনও রেফারেন্সের মাধ্যমে সাবকালেকশন ডকুমেন্ট অ্যাক্সেস করতে পারবেন। যেমন, আপনি /mycoll/mydoc-এ পেরেন্ট ডকুমেন্ট মুছে দিলেও /mycoll/mydoc/mysubcoll/mysubdoc পাথে ডকুমেন্ট অ্যাক্সেস করতে পারবেন।

অস্তিত্বহীন পেরেন্ট ডকুমেন্ট কনসোলে দেখা যায়, কিন্তু সেগুলি কোয়েরি ফলাফল এবং স্ন্যাপশটে দেখা যায় না।

আপনি কোনও ডকুমেন্ট এবং তার সাবকালেকশনের মধ্যে থাকা সব ডকুমেন্ট মুছে ফেলতে চাইলে, আপনাকে ম্যানুয়ালি তা করতে হবে। আরও তথ্যের জন্য, কালেকশন মুছে দিন বিকল্প দেখুন।

ফিল্ড মুছুন

কোনও ডকুমেন্ট থেকে নির্দিষ্ট ফিল্ড মুছে ফেলতে, আপনি কোনও ডকুমেন্ট আপডেট করার সময় নিম্নলিখিত ভাষা-নির্দিষ্ট FieldValue.delete() পদ্ধতি ব্যবহার করুন:

Web

deleteField() পদ্ধতি ব্যবহার করুন:

import { doc, updateDoc, deleteField } from "firebase/firestore";

const cityRef = doc(db, 'cities', 'BJ');

// Remove the 'capital' field from the document
await updateDoc(cityRef, {
    capital: deleteField()
});

Web

FieldValue.delete() পদ্ধতি ব্যবহার করুন:

var cityRef = db.collection('cities').doc('BJ');

// Remove the 'capital' field from the document
var removeCapital = cityRef.update({
    capital: firebase.firestore.FieldValue.delete()
});
Swift

FieldValue.delete() পদ্ধতি ব্যবহার করুন:

মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
do {

  try await db.collection("cities").document("BJ").updateData([
    "capital": FieldValue.delete(),
  ])
  print("Document successfully updated")
} catch {
  print("Error updating document: \(error)")
}
Objective-C

fieldValueForDelete: পদ্ধতি ব্যবহার করুন:

মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
[[[self.db collectionWithPath:@"cities"] documentWithPath:@"BJ"] updateData:@{
  @"capital": [FIRFieldValue fieldValueForDelete]
} completion:^(NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error updating document: %@", error);
  } else {
    NSLog(@"Document successfully updated");
  }
}];

Kotlin

FieldValue.delete() পদ্ধতি ব্যবহার করুন:

val docRef = db.collection("cities").document("BJ")

// Remove the 'capital' field from the document
val updates = hashMapOf<String, Any>(
    "capital" to FieldValue.delete(),
)

docRef.update(updates).addOnCompleteListener { }

Java

FieldValue.delete() পদ্ধতি ব্যবহার করুন:

DocumentReference docRef = db.collection("cities").document("BJ");

// Remove the 'capital' field from the document
Map<String,Object> updates = new HashMap<>();
updates.put("capital", FieldValue.delete());

docRef.update(updates).addOnCompleteListener(new OnCompleteListener<Void>() {
    // ...
    // ...

Dart

FieldValue.delete() পদ্ধতি ব্যবহার করুন:

final docRef = db.collection("cities").doc("BJ");

// Remove the 'capital' field from the document
final updates = <String, dynamic>{
  "capital": FieldValue.delete(),
};

docRef.update(updates);
জাভা

FieldValue.delete() পদ্ধতি ব্যবহার করুন:

DocumentReference docRef = db.collection("cities").document("BJ");
Map<String, Object> updates = new HashMap<>();
updates.put("capital", FieldValue.delete());
// Update and delete the "capital" field in the document
ApiFuture<WriteResult> writeResult = docRef.update(updates);
System.out.println("Update time : " + writeResult.get());
Python

firestore.DELETE_FIELD পদ্ধতি ব্যবহার করুন:

city_ref = db.collection("cities").document("BJ")
city_ref.update({"capital": firestore.DELETE_FIELD})

Python

firestore.DELETE_FIELD পদ্ধতি ব্যবহার করুন:

city_ref = db.collection("cities").document("BJ")
await city_ref.update({"capital": firestore.DELETE_FIELD})
C++

FieldValue::Delete() পদ্ধতি ব্যবহার করুন:

DocumentReference doc_ref = db->Collection("cities").Document("BJ");
doc_ref.Update({{"capital", FieldValue::Delete()}})
    .OnCompletion([](const Future<void>& future) { /*...*/ });
Node.js

FieldValue.delete() পদ্ধতি ব্যবহার করুন:

// Create a document reference
const cityRef = db.collection('cities').doc('BJ');

// Remove the 'capital' field from the document
const res = await cityRef.update({
  capital: FieldValue.delete()
});
Go

firestore.Delete পদ্ধতি ব্যবহার করুন:


import (
	"context"
	"log"

	"cloud.google.com/go/firestore"
)

func deleteField(ctx context.Context, client *firestore.Client) error {
	_, err := client.Collection("cities").Doc("BJ").Update(ctx, []firestore.Update{
		{
			Path:  "capital",
			Value: firestore.Delete,
		},
	})
	if err != nil {
		// Handle any errors in an appropriate way, such as returning them.
		log.Printf("An error has occurred: %s", err)
	}

	// ...
	return err
}
PHP

FieldValue::deleteField() পদ্ধতি ব্যবহার করুন:

$cityRef = $db->collection('samples/php/cities')->document('BJ');
$cityRef->update([
    ['path' => 'capital', 'value' => FieldValue::deleteField()]
]);
Unity

FieldValue.Delete পদ্ধতি ব্যবহার করুন:

DocumentReference cityRef = db.Collection("cities").Document("BJ");
Dictionary<string, object> updates = new Dictionary<string, object>
{
    { "Capital", FieldValue.Delete }
};
C#

FieldValue.Delete পদ্ধতি ব্যবহার করুন:

DocumentReference cityRef = db.Collection("cities").Document("BJ");
Dictionary<string, object> updates = new Dictionary<string, object>
{
    { "Capital", FieldValue.Delete }
};
await cityRef.UpdateAsync(updates);
Ruby

firestore.field_delete পদ্ধতি ব্যবহার করুন:

city_ref = firestore.doc "#{collection_path}/BJ"
city_ref.update({ capital: firestore.field_delete })

কালেকশন মুছে দিন

Cloud Firestore-এ কোনও সম্পূর্ণ সংগ্রহ বা সাব-কালেকশন মুছে ফেলতে, সংগ্রহ বা সাব-কালেকশনের মধ্যে থাকা সব ডকুমেন্ট ফিরিয়ে আনুন (পড়ুন) এবং সেগুলি মুছে ফেলুন। এই প্রসেসে রিড ও ডিলিট করার খরচ অন্তর্ভুক্ত থাকে। আপনার কাছে আরও বড় কালেকশন থাকলে, আউট-অফ-মেমরি সমস্যা এড়াতে আপনি ছোট ছোট ব্যাচে ডকুমেন্ট মুছে ফেলতে পারেন। সম্পূর্ণ সংগ্রহ বা সাব-কালেকশন মুছে না ফেলা পর্যন্ত প্রসেসটি রিপিট করুন।

একটি সংগ্রহ মুছে ফেলার জন্য সীমাহীন সংখ্যক স্বতন্ত্র মুছে ফেলার অনুরোধের সমন্বয় প্রয়োজন। আপনাকে যদি সম্পূর্ণ সংগ্রহ মুছে ফেলতে হয়, তাহলে শুধুমাত্র একটি বিশ্বস্ত সার্ভার এনভায়রনমেন্ট থেকে তা করুন। মোবাইল/ওয়েব ক্লায়েন্ট থেকে কোনও কালেকশন মুছে ফেলা সম্ভব হলেও, তা করলে নিরাপত্তা ও পারফর্ম্যান্সের উপর নেতিবাচক প্রভাব পড়ে।

নিম্নলিখিত স্নিপেটগুলি স্বচ্ছতার জন্য সরলীকৃত এবং এতে ত্রুটি হ্যান্ডলিং, নিরাপত্তা, সাবকালেকশন মুছে ফেলা বা পারফর্ম্যান্স অপ্টিমাইজেশন অন্তর্ভুক্ত নেই। প্রোডাকশনে কালেকশন মুছে ফেলার জন্য সাজেস্ট করা একটি পদ্ধতি সম্পর্কে আরও জানতে, কালেকশন এবং সাব-কালেকশন মুছে ফেলা দেখুন।

ওয়েব
// Deleting collections from a Web client is not recommended.
Swift
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
// Deleting collections from an Apple client is not recommended.
Objective-C
মনে রাখবেন: এই প্রোডাক্ট watchOS এবং অ্যাপ ক্লিপ টার্গেটে উপলভ্য নয়।
// Deleting collections from an Apple client is not recommended.
  

Kotlin

// Deleting collections from an Android client is not recommended.

Java

// Deleting collections from an Android client is not recommended.

Dart

ক্লায়েন্ট থেকে কালেকশন মুছে ফেলার সাজেশন দেওয়া হয় না।

জাভা

import com.google.api.core.ApiFuture;
import com.google.cloud.firestore.CollectionReference;
import com.google.cloud.firestore.Firestore;
import com.google.cloud.firestore.FirestoreOptions;

public class DeleteCollection {

  /**
   * Delete a collection and all its subcollections.
   *
   * @param projectId The Google Cloud project ID
   * @param collectionName The name of the collection to delete
   */
  public static void deleteCollection(String projectId, String collectionName) throws Exception {
    FirestoreOptions firestoreOptions =
        FirestoreOptions.getDefaultInstance().toBuilder().setProjectId(projectId).build();
    try (Firestore db = firestoreOptions.getService()) {
      CollectionReference collection = db.collection(collectionName);

      ApiFuture<Void> future = db.recursiveDelete(collection);

      future.get();
      System.out.println("Collection and all its subcollections deleted successfully.");
    }
  }

  public static void main(String[] args) throws Exception {
    String projectId = "example-project-id";
    String collectionName = "example-collection-name";

    deleteCollection(projectId, collectionName);
  }
}
Python
def delete_collection(coll_ref):

    print(f"Recursively deleting collection: {coll_ref}")
    db.recursive_delete(coll_ref)

Python

async def delete_collection(coll_ref):

    await db.recursive_delete(coll_ref)
C++
// This is not supported. Delete data using CLI as discussed below.
  
Node.js
async function deleteCollection(db, collectionPath) {
  const collectionRef = db.collection(collectionPath);
  return await db.recursiveDelete(collectionRef);
}
Go

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/firestore"
	"google.golang.org/api/iterator"
)

func deleteCollection(w io.Writer, projectID, collectionName string,
	batchSize int) error {

	// Instantiate a client
	ctx := context.Background()
	client, err := firestore.NewClient(ctx, projectID)
	if err != nil {
		return err
	}

	col := client.Collection(collectionName)
	bulkwriter := client.BulkWriter(ctx)

	for {
		// Get a batch of documents
		iter := col.Limit(batchSize).Documents(ctx)
		numDeleted := 0

		// Iterate through the documents, adding
		// a delete operation for each one to the BulkWriter.
		for {
			doc, err := iter.Next()
			if err == iterator.Done {
				break
			}
			if err != nil {
				return err
			}

			bulkwriter.Delete(doc.Ref)
			numDeleted++
		}

		// If there are no documents to delete,
		// the process is over.
		if numDeleted == 0 {
			bulkwriter.End()
			break
		}

		bulkwriter.Flush()
	}
	fmt.Fprintf(w, "Deleted collection \"%s\"", collectionName)
	return nil
}
PHP
function data_delete_collection(string $projectId, string $collectionName, int $batchSize)
{
    // Create the Cloud Firestore client
    $db = new FirestoreClient([
        'projectId' => $projectId,
    ]);
    $collectionReference = $db->collection($collectionName);
    $documents = $collectionReference->limit($batchSize)->documents();
    while (!$documents->isEmpty()) {
        foreach ($documents as $document) {
            printf('Deleting document %s' . PHP_EOL, $document->id());
            $document->reference()->delete();
        }
        $documents = $collectionReference->limit($batchSize)->documents();
    }
}
Unity
// This is not supported. Delete data using CLI as discussed below.
C#
private static async Task DeleteCollection(CollectionReference collectionReference, int batchSize)
{
    QuerySnapshot snapshot = await collectionReference.Limit(batchSize).GetSnapshotAsync();
    IReadOnlyList<DocumentSnapshot> documents = snapshot.Documents;
    while (documents.Count > 0)
    {
        foreach (DocumentSnapshot document in documents)
        {
            Console.WriteLine("Deleting document {0}", document.Id);
            await document.Reference.DeleteAsync();
        }
        snapshot = await collectionReference.Limit(batchSize).GetSnapshotAsync();
        documents = snapshot.Documents;
    }
    Console.WriteLine("Finished deleting all documents from the collection.");
}
Ruby
cities_ref = firestore.col collection_path
query      = cities_ref

query.get do |document_snapshot|
  puts "Deleting document #{document_snapshot.document_id}."
  document_ref = document_snapshot.ref
  document_ref.delete
end

TTL নীতির মাধ্যমে ডেটা মুছে ফেলা

TTL নীতি কোনও নির্দিষ্ট কালেকশন গ্রুপের ডকুমেন্টের মেয়াদ শেষ হওয়ার সময় হিসেবে একটি নির্দিষ্ট ফিল্ডকে চিহ্নিত করে। TTL মুছে ফেলার অপারেশন আপনার ডকুমেন্ট মুছে ফেলার খরচের মধ্যে পড়ে।

TTL সেট করা সম্পর্কে তথ্যের জন্য, TTL নীতির মাধ্যমে ডেটার রেকর্ড রাখা ম্যানেজ করুন দেখুন।

একসাথে অনেক কিছু মুছে ফেলার কাজ

Cloud Firestore-এ বাল্ক ডিলিট করার জন্য একাধিক টুল আছে। আপনার কতগুলি ডকুমেন্ট মুছে ফেলতে হবে এবং কতটা কনফিগার করার সুবিধা প্রয়োজন, তার উপর ভিত্তি করে টুল বেছে নিন।

হাজার হাজার ডকুমেন্টের ছোট কাজের জন্য, কনসোল বা Firebase CLI ব্যবহার করুন। বড় কাজের ক্ষেত্রে, এই টুলগুলি টাইমআউট হতে শুরু করতে পারে এবং আপনাকে টুলটি একাধিকবার চালাতে হতে পারে।

কনসোল

আপনি কনসোলের Cloud Firestore পৃষ্ঠা থেকে ডকুমেন্ট ও সংগ্রহ মুছে ফেলতে পারবেন। কনসোল থেকে কোনও ডকুমেন্ট মুছে দিলে, সেই ডকুমেন্টের মধ্যে থাকা সব নেস্টেড ডেটা মুছে যায়, যার মধ্যে যেকোনও সাব-কালেকশনও অন্তর্ভুক্ত।

Firebase CLI

এছাড়াও, ডকুমেন্ট ও কালেকশন মুছে দিতে আপনি Firebase CLI ব্যবহার করতে পারবেন। ডেটা মুছে ফেলতে নিম্নলিখিত কমান্ড ব্যবহার করুন:

firebase firestore:delete  --database=DATABASE_ID PATH

DATABASE_ID-এর জায়গায় আপনার ডেটাবেসের আইডি এবং PATH-এর জায়গায় ডকুমেন্ট বা কালেকশনের পাথ লিখুন।

অনেক বেশি সংখ্যক (লক্ষ লক্ষ ডকুমেন্ট) মুছে ফেলার কাজের জন্য, নিম্নলিখিতগুলির মধ্যে একটি ব্যবহার করুন:

ম্যানেজ করা বাল্ক ডিলিট

Cloud Firestore-এর মাধ্যমে এক বা একাধিক কালেকশন গ্রুপ বাল্ক ডিলিট করা যায়। আরও তথ্যের জন্য, একসাথে অনেক ডেটা মুছে দিন দেখুন।

Dataflow কানেক্টর

আপনার ডেটাবেসে বাল্ক অপারেশনের জন্য Dataflow ব্যবহার করতে পারবেন। এই বিকল্পটি সবচেয়ে বেশি কনফিগার করা যায়, তবে অন্যান্য বাল্ক ডিলিট বিকল্পের চেয়ে বেশি সেট-আপের প্রয়োজন হয়। Dataflow-এর সাথে পরিচিতি ব্লগ পোস্টে Cloud Firestore কানেক্টর দেখুন, এতে একটি কালেকশন গ্রুপের সব ডকুমেন্ট মুছে ফেলার উদাহরণ রয়েছে।