Cloud Firestore से डेटा मिटाएं

यहां दिए गए उदाहरणों से पता चलता है कि दस्तावेज़ों, फ़ील्ड, और कलेक्शन को कैसे मिटाया जाता है.

एआई असिस्टेंस पाने के लिए, यहां दिए गए प्रॉम्प्ट को अपने एआई कोडिंग एजेंट (जैसे, 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 और App Clip टारगेट पर उपलब्ध नहीं है.
do {
  try await db.collection("cities").document("DC").delete()
  print("Document successfully removed!")
} catch {
  print("Error removing document: \(error)")
}
Objective-C

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"),
    );
Java

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();
जाएं

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 और App Clip टारगेट पर उपलब्ध नहीं है.
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 और 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);
Java

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()
});
जाएं

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 और App Clip टारगेट पर उपलब्ध नहीं है.
// Deleting collections from an Apple client is not recommended.
Objective-C
ध्यान दें: यह प्रॉडक्ट, 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

क्लाइंट से कलेक्शन मिटाने का सुझाव नहीं दिया जाता.

Java

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);
}
जाएं

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

टीटीएल नीतियों की मदद से डेटा मिटाना

टीटीएल नीति, किसी फ़ील्ड को किसी कलेक्शन ग्रुप में मौजूद दस्तावेज़ों की समयसीमा खत्म होने के समय के तौर पर तय करती है. टीटीएल के तहत मिटाए गए दस्तावेज़ों की संख्या, दस्तावेज़ मिटाने की लागत में जोड़ी जाती है.

टीटीएल सेट करने के बारे में जानकारी पाने के लिए, टीटीएल की नीतियों की मदद से डेटा के रखरखाव को मैनेज करना लेख पढ़ें.

एक साथ कई आइटम मिटाने वाले जॉब

Cloud Firestore पर, एक साथ कई आइटम मिटाने के लिए कई टूल उपलब्ध हैं. आपको कितने दस्तावेज़ मिटाने हैं और आपको कॉन्फ़िगरेशन के किस लेवल की ज़रूरत है, इसके आधार पर आपको कोई टूल चुनना चाहिए.

हज़ारों दस्तावेज़ों वाले छोटे कामों के लिए, कंसोल या Firebase CLI का इस्तेमाल करें. बड़े कामों के लिए, इन टूल का टाइम आउट हो सकता है. ऐसे में, आपको टूल को कई बार चलाना पड़ सकता है.

कंसोल

Console में Cloud Firestore पेज पर जाकर, दस्तावेज़ और कलेक्शन मिटाए जा सकते हैं. कंसोल से किसी दस्तावेज़ को मिटाने पर, उस दस्तावेज़ में मौजूद सारा नेस्ट किया गया डेटा मिट जाता है. इसमें कोई भी सब-कलेक्शन शामिल है.

Firebase CLI

दस्तावेज़ों और कलेक्शन को मिटाने के लिए, Firebase CLI का भी इस्तेमाल किया जा सकता है. डेटा मिटाने के लिए, इस निर्देश का इस्तेमाल करें:

firebase firestore:delete  --database=DATABASE_ID PATH

DATABASE_ID को अपने डेटाबेस आईडी से और PATH को किसी दस्तावेज़ या कलेक्शन के पाथ से बदलें.

ज़्यादा संख्या में दस्तावेज़ (लाखों दस्तावेज़) मिटाने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:

एक साथ कई आइटम मिटाने की सुविधा को मैनेज किया गया

Cloud Firestore में एक या उससे ज़्यादा कलेक्शन ग्रुप को एक साथ मिटाया जा सकता है. ज़्यादा जानकारी के लिए, एक साथ कई डेटा मिटाना लेख पढ़ें.

Dataflow कनेक्टर

अपने डेटाबेस पर एक साथ कई कार्रवाइयां करने के लिए, Dataflow का इस्तेमाल किया जा सकता है. इस विकल्प को सबसे ज़्यादा कॉन्फ़िगर किया जा सकता है. हालांकि, एक साथ कई ईमेल मिटाने के अन्य विकल्पों की तुलना में, इसे सेट अप करने में ज़्यादा समय लगता है. Dataflow के बारे में जानकारी देने वाली ब्लॉग पोस्ट में, Cloud Firestore कनेक्टर के बारे में देखें. इसमें, कलेक्शन ग्रुप में मौजूद सभी दस्तावेज़ों को मिटाने का उदाहरण दिया गया है.