ক্লাউড ফায়ারস্টোর থেকে ডেটা মুছুন

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

নথি মুছে ফেলুন

একটি ডকুমেন্ট মুছে ফেলার জন্য, নিম্নলিখিত ভাষা-নির্দিষ্ট 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);
});
সুইফট

delete() মেথডটি ব্যবহার করুন:

দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
do {
  try await db.collection("cities").document("DC").delete()
  print("Document successfully removed!")
} catch {
  print("Error removing document: \(error)")
}
উদ্দেশ্য-সি

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

দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
[[[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());
পাইথন

delete() মেথডটি ব্যবহার করুন:

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

Python

delete() মেথডটি ব্যবহার করুন:

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

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;
      }
    });
নোড.জেএস

delete() মেথডটি ব্যবহার করুন:

const res = await db.collection('cities').doc('DC').delete();
যান

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
}
পিএইচপি

delete() মেথডটি ব্যবহার করুন:

$db->collection('samples/php/cities')->document('DC')->delete();
ঐক্য

DeleteAsync() মেথডটি ব্যবহার করুন:

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

DeleteAsync() মেথডটি ব্যবহার করুন:

DocumentReference cityRef = db.Collection("cities").Document("DC");
await cityRef.DeleteAsync();
রুবি

delete() মেথডটি ব্যবহার করুন:

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

আপনি যখন কোনো ডকুমেন্ট ডিলিট করেন, তখন Cloud Firestore স্বয়ংক্রিয়ভাবে তার সাব-কালেকশনগুলোর ভেতরের ডকুমেন্টগুলো ডিলিট করে না। আপনি রেফারেন্সের মাধ্যমে সাব-কালেকশনের ডকুমেন্টগুলো অ্যাক্সেস করতে পারবেন। উদাহরণস্বরূপ, আপনি /mycoll/mydoc পাথের প্যারেন্ট ডকুমেন্টটি ডিলিট করে দিলেও, /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()
});
সুইফট

FieldValue.delete() মেথডটি ব্যবহার করুন:

দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
do {

  try await db.collection("cities").document("BJ").updateData([
    "capital": FieldValue.delete(),
  ])
  print("Document successfully updated")
} catch {
  print("Error updating document: \(error)")
}
উদ্দেশ্য-সি

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

দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
[[[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());
পাইথন

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})
সি++

FieldValue::Delete() মেথডটি ব্যবহার করুন:

DocumentReference doc_ref = db->Collection("cities").Document("BJ");
doc_ref.Update({{"capital", FieldValue::Delete()}})
    .OnCompletion([](const Future<void>& future) { /*...*/ });
নোড.জেএস

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()
});
যান

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
}
পিএইচপি

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

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

FieldValue.Delete মেথডটি ব্যবহার করুন:

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

FieldValue.Delete মেথডটি ব্যবহার করুন:

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

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.
সুইফট
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
// Deleting collections from an Apple client is not recommended.
উদ্দেশ্য-সি
দ্রষ্টব্য: এই পণ্যটি watchOS এবং App Clip টার্গেটগুলিতে উপলব্ধ নয়।
// 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

ক্লায়েন্ট থেকে কালেকশন মুছে ফেলার সুপারিশ করা হয় না।

জাভা
/**
 * Delete a collection in batches to avoid out-of-memory errors. Batch size may be tuned based on
 * document size (atmost 1MB) and application requirements.
 */
void deleteCollection(CollectionReference collection, int batchSize) {
  try {
    // retrieve a small batch of documents to avoid out-of-memory errors
    ApiFuture<QuerySnapshot> future = collection.limit(batchSize).get();
    int deleted = 0;
    // future.get() blocks on document retrieval
    List<QueryDocumentSnapshot> documents = future.get().getDocuments();
    for (QueryDocumentSnapshot document : documents) {
      document.getReference().delete();
      ++deleted;
    }
    if (deleted >= batchSize) {
      // retrieve and delete another batch
      deleteCollection(collection, batchSize);
    }
  } catch (Exception e) {
    System.err.println("Error deleting collection : " + e.getMessage());
  }
}
পাইথন
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)
সি++
// This is not supported. Delete data using CLI as discussed below.
  
নোড.জেএস
async function deleteCollection(db, collectionPath) {
  const collectionRef = db.collection(collectionPath);
  return await db.recursiveDelete(collectionRef);
}
যান

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
}
পিএইচপি
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();
    }
}
ঐক্য
// This is not supported. Delete data using CLI as discussed below.
সি#
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.");
}
রুবি
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 firestore:delete  --database=DATABASE_ID PATH

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

বিপুল পরিমাণে নথি মুছে ফেলার কাজের জন্য (লক্ষ লক্ষ নথি), নিম্নলিখিতগুলির মধ্যে একটি ব্যবহার করুন:

পরিচালিত বাল্ক ডিলিট

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

ডেটাফ্লো সংযোগকারী

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