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

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

DDD
DDD원래의
2024-10-28 12:51:30763검색

 How to Effectively Delete Collections and Subcollections in Firestore?

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

Firestore를 사용하면 컬렉션이나 하위 컬렉션을 삭제해야 하는 시나리오가 발생할 수 있습니다. 그러나 하위 컬렉션이 포함된 상위 문서를 삭제하면 문제가 발생합니다. 이 문서에서는 이러한 상황을 효과적으로 관리하는 방법을 설명합니다.

데이터베이스 구조 및 삭제 문제

각 문서가 목록을 나타내는 "목록"이라는 컬렉션이 있는 시나리오를 생각해 보세요. 고유 ID로. 각 목록 문서에는 "직원" 및 "위치"라는 하위 컬렉션이 있습니다. 구조는 다음과 같습니다.

(lists)
    -listId
       (employees)
       (locations)

사용자가 특정 목록을 삭제하려는 경우 "listId" 문서를 삭제하면 Firestore의 문서를 무시하고 해당 하위 컬렉션이 유지됩니다.

해결책 : 순차 삭제

이 문제를 해결하기 위해 순차 삭제 접근 방식을 제안합니다.

  1. "직원" 하위 컬렉션 내의 모든 문서를 검색하여 삭제합니다.
  2. "locations" 하위 컬렉션에 대해 프로세스를 반복합니다.
  3. 마지막으로 "listId" 문서를 삭제합니다.

이 방법을 사용하면 특정 목록 및 관련 하위 컬렉션이 완전히 제거됩니다.

고려 사항

삭제는 효과적인 도구이지만, Firebase는 특히 대규모 컬렉션의 경우 신중하게 사용할 것을 권장합니다. 그러나 소규모 컬렉션의 경우 삭제가 실행 가능한 옵션입니다. 대규모 컬렉션에 대한 삭제 사용이 불가피한 경우 신뢰할 수 있는 서버 환경에서 실행하십시오.

Android용 코드 구현

Android 애플리케이션의 경우 다음 코드를 사용하여 다음을 수행할 수 있습니다. 삭제 프로세스 구현:

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();
}

이 코드는 문서를 일괄적으로 검색하고 삭제하여 컬렉션과 하위 컬렉션을 모두 삭제합니다.

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

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