"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Firestore에서 컬렉션 및 하위 컬렉션을 효과적으로 삭제하는 방법은 무엇입니까?

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

2024-11-03에 게시됨
검색:347

 How to Effectively Delete Collections and Subcollections in Firestore?

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

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

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

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

(lists)
    -listId
       (employees)
       (locations)

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

해결책: 순차적 삭제

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

  1. "직원" 하위 컬렉션 내의 모든 문서를 검색하고 삭제합니다.
  2. "locations" 하위 컬렉션.
  3. 마지막으로 "listId" 문서를 삭제합니다.

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

고려사항

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

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

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

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3