Cloud Firestore'dan veri silme

Aşağıdaki örneklerde dokümanların, alanların ve koleksiyonların nasıl silineceği gösterilmektedir.

Yapay zeka desteği için aşağıdaki istemi yapay zeka kodlama temsilcinize (ör. Android Studio'da Gemini, Antigravity, Claude Code, Codex ve Cursor) kopyalayın. İstemi özelleştirebilir ve temsilcinizle birlikte üzerinde çalışabilirsiniz. Ayrıntılı kurulum bilgileri için Firebase aracı becerileri sayfasını ziyaret edin.

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.

Dokümanları silme

Bir dokümanı silmek için dile özgü aşağıdaki delete() yöntemlerini kullanın:

Web

deleteDoc() yöntemini kullanın:

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

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

Web

delete() yöntemini kullanın:

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

delete() yöntemini kullanın:

Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
do {
  try await db.collection("cities").document("DC").delete()
  print("Document successfully removed!")
} catch {
  print("Error removing document: \(error)")
}
Objective-C

deleteDocumentWithCompletion: yöntemini kullanın:

Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
[[[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() yöntemini kullanın:

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

Java

delete() yöntemini kullanın:

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() yöntemini kullanın:

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

delete() yöntemini kullanın:

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

delete() yöntemini kullanın:

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

Python

delete() yöntemini kullanın:

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

Delete() yöntemini kullanın:

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() yöntemini kullanın:

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

Delete() yöntemini kullanın:


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() yöntemini kullanın:

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

DeleteAsync() yöntemini kullanın:

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

DeleteAsync() yöntemini kullanın:

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

delete() yöntemini kullanın:

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

Bir dokümanı sildiğinizde Cloud Firestore, alt koleksiyonlarındaki dokümanları otomatik olarak silmez. Alt koleksiyon belgelerine referansla erişmeye devam edebilirsiniz. Örneğin, /mycoll/mydoc yolundaki üst dokümanı silseniz bile /mycoll/mydoc/mysubcoll/mysubdoc yolundaki dokümana erişebilirsiniz.

Mevcut olmayan üst belgeler konsolda görünür ancak sorgu sonuçlarında ve anlık görüntülerde görünmez.

Bir dokümanı ve alt koleksiyonlarındaki tüm dokümanları silmek istiyorsanız bunu manuel olarak yapmanız gerekir. Daha fazla bilgi için Koleksiyonları silme başlıklı makaleyi inceleyin.

Alanları silme

Bir dokümandaki belirli alanları silmek için dokümanı güncellerken dile özgü aşağıdaki FieldValue.delete() yöntemlerini kullanın:

Web

deleteField() yöntemini kullanın:

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() yöntemini kullanın:

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() yöntemini kullanın:

Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
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: yöntemini kullanın:

Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
[[[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() yöntemini kullanın:

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() yöntemini kullanın:

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() yöntemini kullanın:

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() yöntemini kullanın:

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 yöntemini kullanın:

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

Python

firestore.DELETE_FIELD yöntemini kullanın:

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

FieldValue::Delete() yöntemini kullanın:

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

FieldValue.delete() yöntemini kullanın:

// 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 yöntemini kullanın:


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() yöntemini kullanın:

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

FieldValue.Delete yöntemini kullanın:

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

FieldValue.Delete yöntemini kullanın:

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 yöntemini kullanın:

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

Koleksiyonları silme

Cloud Firestore içinde bir koleksiyonun veya alt koleksiyonun tamamını silmek için koleksiyon ya da alt koleksiyondaki tüm dokümanları alıp (okuyup) silin. Bu işlem hem okuma hem de silme maliyetlerine neden olur. Daha büyük koleksiyonlarınız varsa bellek yetersizliği hatalarını önlemek için belgeleri daha küçük gruplar halinde silmeniz önerilir. Koleksiyonun veya alt koleksiyonun tamamını silene kadar bu işlemi tekrarlayın.

Bir koleksiyonu silmek için sınırsız sayıda silme isteğinin koordine edilmesi gerekir. Koleksiyonların tamamını silmeniz gerekiyorsa bunu yalnızca güvenilir bir sunucu ortamından yapın. Mobil/web istemcisinden koleksiyon silmek mümkün olsa da bu işlem güvenlik ve performans açısından olumsuz sonuçlar doğurur.

Aşağıdaki snippet'ler, anlaşılır olması için basitleştirilmiştir ve hata işleme, güvenlik, alt koleksiyonları silme veya performans optimizasyonlarını içermez. Üretim ortamında koleksiyon silmeyle ilgili önerilen bir yaklaşım hakkında daha fazla bilgi edinmek için Koleksiyonları ve Alt Koleksiyonları Silme başlıklı makaleyi inceleyin.

Web
// Deleting collections from a Web client is not recommended.
Swift
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
// Deleting collections from an Apple client is not recommended.
Objective-C
Not: Bu ürün, watchOS ve App Clip hedeflerinde kullanılamaz.
// 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

Koleksiyonların istemciden silinmesi önerilmez.

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);
}
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 politikalarıyla verileri silme

TTL politikası, belirli bir koleksiyon grubundaki belgelerin geçerlilik bitiş zamanı olarak belirli bir alan belirler. TTL silme işlemleri, doküman silme maliyetlerinize dahil edilir.

TTL ayarlama hakkında bilgi için TTL politikalarıyla veri saklamayı yönetme başlıklı makaleyi inceleyin.

Toplu silme işleri

Cloud Firestore, toplu silme işlemi için çeşitli araçları destekler. Silmeniz gereken belge sayısına ve ihtiyacınız olan yapılandırılabilirlik düzeyine göre bir araç seçmeniz gerekir.

Binlerce doküman içeren daha küçük işler için konsolu veya Firebase CLI'yı kullanın. Daha büyük işlerde bu araçlar zaman aşımına uğrayabilir ve aracı birden çok kez çalıştırmanız gerekebilir.

Konsol

Konsoldaki Cloud Firestore sayfasından dokümanları ve koleksiyonları silebilirsiniz. Konsoldan bir dokümanı sildiğinizde, alt koleksiyonlar da dahil olmak üzere o dokümandaki tüm iç içe yerleştirilmiş veriler silinir.

Firebase CLI

Belgeleri ve koleksiyonları silmek için Firebase CLI'yı da kullanabilirsiniz. Verileri silmek için aşağıdaki komutu kullanın:

firebase firestore:delete  --database=DATABASE_ID PATH

DATABASE_ID ifadesini veritabanı kimliğinizle, PATH ifadesini ise bir doküman veya koleksiyonun yoluyla değiştirin.

Büyük silme işleri (milyonlarca doküman) için aşağıdakilerden birini kullanın:

Yönetilen toplu silme

Cloud Firestore, bir veya daha fazla koleksiyon grubunun toplu olarak silinmesini destekler. Daha fazla bilgi için Verileri toplu olarak silme başlıklı makaleyi inceleyin.

Dataflow bağlayıcısı

Veritabanınızda toplu işlemler yapmak için Dataflow'u kullanabilirsiniz. Bu seçenek en fazla yapılandırma imkanı sunar ancak diğer toplu silme seçeneklerine göre daha fazla kurulum gerektirir. Cloud Firestore Dataflow'a giriş niteliğindeki blog yayınında, koleksiyon grubundaki tüm dokümanları silmeyle ilgili bir örnek bulabilirsiniz.