次の例は、ドキュメント、フィールド、コレクションを削除する方法を示しています。
ドキュメントを削除する
ドキュメントを削除するには、delete()
メソッドを使用します。
ウェブ
db.collection("cities").doc("DC").delete().then(function() { console.log("Document successfully deleted!"); }).catch(function(error) { console.error("Error removing document: ", error); });
Swift
db.collection("cities").document("DC").delete() { err in if let err = err { print("Error removing document: \(err)") } else { print("Document successfully removed!") } }
Objective-C
[[[self.db collectionWithPath:@"cities"] documentWithPath:@"DC"] deleteDocumentWithCompletion:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Error removing document: %@", error); } else { NSLog(@"Document successfully removed!"); } }];
Java
Android
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); } });
Kotlin+KTX
Android
db.collection("cities").document("DC") .delete() .addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully deleted!") } .addOnFailureListener { e -> Log.w(TAG, "Error deleting document", e) }
Java
// asynchronously delete a document ApiFuture<WriteResult> writeResult = db.collection("cities").document("DC").delete(); // ... System.out.println("Update time : " + writeResult.get().getUpdateTime());
Python
db.collection(u'cities').document(u'DC').delete()
C++
db->Collection("cities").Document("DC").Delete().OnCompletion( [](const Future<void>& future) { if (future.error() == Error::kErrorOk) { std::cout << "DocumentSnapshot successfully deleted!\n"; } else { std::cout << "Error deleting document: " << future.error_message() << '\n'; } });
Node.js
const res = await db.collection('cities').doc('DC').delete();
Go
_, 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) }
PHP
$db->collection('cities')->document('DC')->delete();
Unity
DocumentReference cityRef = db.Collection("cities").Document("DC"); cityRef.DeleteAsync();
C#
DocumentReference cityRef = db.Collection("cities").Document("DC"); await cityRef.DeleteAsync();
Ruby
city_ref = firestore.doc "#{collection_path}/DC" city_ref.delete
ドキュメントを削除しても、Firestore がそのドキュメントのサブコレクションに含まれるドキュメントを自動的に削除することはありません。サブコレクションのドキュメントには参照により引き続きアクセスできます。たとえば、パス /mycoll/mydoc/mysubcoll/mysubdoc
にあるドキュメントには、/mycoll/mydoc
の祖先ドキュメントを削除してもアクセスできます。
存在しない祖先ドキュメントはコンソールには表示されますが、クエリの結果やスナップショットには表示されません。
ドキュメントと、そのドキュメントのサブコレクション内のすべてのドキュメントを削除するには、手動での操作が必要です。詳しくは、コレクションを削除するをご覧ください。
フィールドを削除する
特定のフィールドをドキュメントから削除するには、ドキュメントを更新するときに 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
db.collection("cities").document("BJ").updateData([ "capital": FieldValue.delete(), ]) { err in if let err = err { print("Error updating document: \(err)") } else { print("Document successfully updated") } }
Objective-C
[[[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"); } }];
Java
Android
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>() { // ... // ...
Kotlin+KTX
Android
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
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
city_ref = db.collection(u'cities').document(u'BJ') city_ref.update({ u'capital': firestore.DELETE_FIELD })
C++
DocumentReference doc_ref = db->Collection("cities").Document("BJ"); doc_ref.Update({{"capital", FieldValue::Delete()}}) .OnCompletion([](const Future<void>& future) { /*...*/ });
Node.js
// Get the `FieldValue` object const FieldValue = admin.firestore.FieldValue; // 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
_, 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) }
PHP
$cityRef = $db->collection('cities')->document('BJ'); $cityRef->update([ ['path' => 'capital', 'value' => FieldValue::deleteField()] ]);
Unity
DocumentReference cityRef = db.Collection("cities").Document("BJ"); Dictionary<string, object> updates = new Dictionary<string, object> { { "Capital", FieldValue.Delete } };
C#
DocumentReference cityRef = db.Collection("cities").Document("BJ"); Dictionary<string, object> updates = new Dictionary<string, object> { { "Capital", FieldValue.Delete } }; await cityRef.UpdateAsync(updates);
Ruby
city_ref = firestore.doc "#{collection_path}/BJ" city_ref.update capital: firestore.field_delete
コレクションを削除する
Firestore でコレクション全体またはサブコレクションを削除するには、コレクションまたはサブコレクション内のすべてのドキュメントを取得して削除します。大きなコレクションがある場合は、メモリ不足エラーを避けるため、小さなバッチに分けてドキュメントを削除することをおすすめします。コレクション全体またはサブコレクションが削除されるまで、このプロセスを繰り返します。
コレクションを削除するには、数に制約のない個別の削除リクエストを用意する必要があります。コレクション全体を削除する必要がある場合は、信頼できるサーバー環境からのみ実行してください。モバイル / ウェブ クライアントからコレクションを削除することも可能ですが、その場合セキュリティとパフォーマンスに悪影響を与えます。
以下のスニペットは少し単純化されていて、エラー処理、セキュリティ、サブコレクションの削除、またはパフォーマンスの最大化については扱っていません。本番環境でコレクションを削除するために推奨される方法については、コレクションとサブコレクションを削除するをご覧ください。
ウェブ
// Deleting collections from a Web client is not recommended.
Swift
// Deleting collections from an iOS client is not recommended.
Objective-C
// Deleting collections from an iOS client is not recommended.
Java
Android
// Deleting collections from an Android client is not recommended.
Kotlin+KTX
Android
// Deleting collections from an Android client is not recommended.
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): docs = coll_ref.limit(batch_size).stream() deleted = 0 for doc in docs: print(f'Deleting doc {doc.id} => {doc.to_dict()}') 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
func deleteCollection(ctx context.Context, client *firestore.Client, ref *firestore.CollectionRef, batchSize int) error { for { // Get a batch of documents iter := ref.Limit(batchSize).Documents(ctx) numDeleted := 0 // Iterate through the documents, adding // a delete operation for each one to a // WriteBatch. batch := client.Batch() for { doc, err := iter.Next() if err == iterator.Done { break } if err != nil { return err } batch.Delete(doc.Ref) numDeleted++ } // If there are no documents to delete, // the process is over. if numDeleted == 0 { return nil } _, err := batch.Commit(ctx) if err != nil { return err } } }
PHP
function delete_collection($collectionReference, $batchSize) { $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 でデータを削除する
Firebase CLI を使用して、ドキュメントやコレクションを削除することもできます。データを削除するには、次のコマンドを使用します。
firebase firestore:delete [options] <<path>>
コンソールでデータを削除する
コンソールの Firestore ページからドキュメントやコレクションを削除できます。コンソールからドキュメントを削除すると、サブコレクションを含めて、ドキュメント内のネストされたデータがすべて削除されます。