>  기사  >  Java  >  Firestore 컬렉션 및 하위 컬렉션을 효과적으로 삭제하는 방법은 무엇입니까?

Firestore 컬렉션 및 하위 컬렉션을 효과적으로 삭제하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-26 15:30:03454검색

How to Delete Firestore Collections and Subcollections Effectively?

Firestore에서 컬렉션 및 하위 컬렉션 삭제

문제 설명:

Firestore 데이터베이스에서 목록 모음으로, 각 목록에는 직원과 위치라는 두 개의 하위 컬렉션이 포함됩니다. 사용자가 특정 목록을 삭제하려는 경우, 목록 문서만 삭제해도 하위 컬렉션은 제거되지 않습니다. 이 문제는 하위 컬렉션이 있는 문서를 삭제해도 해당 하위 컬렉션이 자동으로 제거되지 않는다는 Firestore 문서 표시로 인해 발생합니다.

제안된 솔루션:

1. 반복적으로 하위 컬렉션 삭제:

  • 직원 및 위치 하위 컬렉션 내의 모든 문서를 검색합니다.
  • 검색된 각 문서를 삭제합니다.
  • 목록 문서를 삭제합니다.

2. deleteCollection 메서드 사용(권장하지 않음):

  • Firestore deleteCollection 메서드는 컬렉션 내의 모든 문서를 반복적으로 삭제합니다.
  • 메모리 오류를 방지하려면 소규모 컬렉션에만 이 방법을 사용하세요. .
  • 신뢰할 수 있는 서버 환경에서 이 작업을 실행해야 합니다.

재귀 삭제를 위한 Android 코드:

다음 Android 코드는 다음을 보여줍니다. 컬렉션을 재귀적으로 삭제하는 방법:

<code class="java">private void deleteCollection(final CollectionReference collection, Executor executor) {
    Tasks.call(executor, () -> {
        int batchSize = 10;
        Query query = collection.orderBy(FieldPath.documentId()).limit(batchSize);
        List<DocumentSnapshot> deleted = deleteQueryBatch(query);

        while (deleted.size() >= batchSize) {
            DocumentSnapshot last = deleted.get(deleted.size() - 1);
            query = collection.orderBy(FieldPath.documentId()).startAfter(last.getId()).limit(batchSize);

            deleted = deleteQueryBatch(query);
        }

        return null;
    });
}

@WorkerThread
private List<DocumentSnapshot> deleteQueryBatch(final Query query) throws Exception {
    QuerySnapshot querySnapshot = Tasks.await(query.get());

    WriteBatch batch = query.getFirestore().batch();
    for (DocumentSnapshot snapshot : querySnapshot) {
        batch.delete(snapshot.getReference());
    }
    Tasks.await(batch.commit());

    return querySnapshot.getDocuments();
}</code>

위 내용은 Firestore 컬렉션 및 하위 컬렉션을 효과적으로 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.