Cloud Firestore'dan veri silme

Aşağıdaki örneklerde, dokümanların, alanların ve koleksiyonlar oluşturun.

Dokümanları sil

Doküman silmek için aşağıdaki dile özgü 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+KTX

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, içindeki dokümanları silerek alt koleksiyonlardır. Alt koleksiyon dokümanlarına referans olarak erişmeye devam edebilirsiniz. Örneğin, /mycoll/mydoc/mysubcoll/mysubdoc çift /mycoll/mydoc konumundaki üst öğe dokümanını silerseniz.

Var olmayan üst öğe dokümanları konsolda görünür, ancak sorgu sonuçlarında ve anlık görüntülerde görünmez.

Bir dokümanı ve içindeki tüm dokümanları silmek istiyorsanız bunu manuel olarak yapmanız gerekir. Daha fazla bilgi için bkz. Koleksiyonları silebilirsiniz.

Alanları sil

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

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+KTX

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ı silin

Cloud Firestore'da bir koleksiyonun veya alt koleksiyonun tamamını silmek için: koleksiyon veya alt koleksiyondaki tüm dokümanları alma (okuma) ve silme oluşturabilirsiniz. Bu işlem hem okuma hem de silme maliyetlerine tabidir. Daha büyük bu tür koleksiyonların ortaya çıkmasını önlemek için dokümanları küçük hatası. Tümünü silene kadar bu işlemi tekrarlayın koleksiyonu veya alt koleksiyonu ifade eder.

Bir koleksiyonun silinmesi için sınırsız sayıda koleksiyon koordine etmek gerekir. tek tek silme istekleri. Koleksiyonların tamamını silmeniz gerekiyorsa yalnızca bu işlemi gerçekleştirin güvenilir bir sunucu ortamından emin olun. Bir koleksiyonu silmek mümkün olsa da bunu yaparsa güvenlik ve performans olumsuz yönde etkilenir.

Aşağıdaki snippet'ler biraz basitleştirilmiştir ve hata giderme ile uğraşmaz. alt koleksiyonları silme veya performansı artırma. Daha fazla bilgi edinmek için üretimde koleksiyonları silmeye yönelik önerilen bir yaklaşım hakkında daha fazla bilgi için Koleksiyonları ve Alt Koleksiyonları Silme.

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+KTX

// 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
/**
 * 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());
  }
}
Python
def delete_collection(coll_ref, batch_size):
    if batch_size == 0:
        return

    docs = coll_ref.list_documents(page_size=batch_size)
    deleted = 0

    for doc in docs:
        print(f"Deleting doc {doc.id} => {doc.get().to_dict()}")
        doc.delete()
        deleted = deleted + 1

    if deleted >= batch_size:
        return delete_collection(coll_ref, batch_size)

Python

async def delete_collection(coll_ref, batch_size):
    docs = coll_ref.limit(batch_size).stream()
    deleted = 0

    async for doc in docs:
        print(f"Deleting doc {doc.id} => {doc.to_dict()}")
        await doc.reference.delete()
        deleted = deleted + 1

    if deleted >= batch_size:
        return delete_collection(coll_ref, batch_size)
C++
// This is not supported. Delete data using CLI as discussed below.
  
Node.js
async function deleteCollection(db, collectionPath, batchSize) {
  const collectionRef = db.collection(collectionPath);
  const query = collectionRef.orderBy('__name__').limit(batchSize);

  return new Promise((resolve, reject) => {
    deleteQueryBatch(db, query, resolve).catch(reject);
  });
}

async function deleteQueryBatch(db, query, resolve) {
  const snapshot = await query.get();

  const batchSize = snapshot.size;
  if (batchSize === 0) {
    // When there are no documents left, we are done
    resolve();
    return;
  }

  // Delete documents in a batch
  const batch = db.batch();
  snapshot.docs.forEach((doc) => {
    batch.delete(doc.ref);
  });
  await batch.commit();

  // Recurse on the next process tick, to avoid
  // exploding the stack.
  process.nextTick(() => {
    deleteQueryBatch(db, query, resolve);
  });
}
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

Firebase CLI ile veri silme

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

firebase firestore:delete [options] <<path>>

Verileri konsolla silme

Şunları yapabilirsiniz: Konsoldaki Cloud Firestore sayfasından belge ve koleksiyonları silin. Bir dokümanın konsoldan silinmesi, o dokümandaki iç içe yerleştirilmiş tüm verilerin silinmesine neden olur tüm alt koleksiyonlar da dahil olmak üzere bir belge üzerinde yer alır.

TTL politikalarıyla veri silme

TTL politikası, belirli bir alanı bir belgedeki dokümanlar için geçerlilik süresi olarak belirler. veri kümesi oluşturun. TTL silme işlemleri, belge silme işleminizde hesaba katılır gösterir.

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

Hata kodları ve veriler silinirken karşılaşılan gecikme sorunlarının nasıl çözüleceği hakkında daha fazla bilgi için sorun giderme sayfasına göz atın.

Dataflow ile veri silme

Dataflow, Firestore veritabanınızdaki toplu işlemler için mükemmel bir araçtır. İlgili içeriği oluşturmak için kullanılan Dataflow için Firestore bağlayıcısı bulunan blog yayınında tüm dokümanları silmeye ilişkin bir örnek bulunmaktadır. bir koleksiyon grubudur.