Firestore에서 컬렉션 및 하위 컬렉션 삭제
Firestore를 사용하면 컬렉션이나 하위 컬렉션을 삭제해야 하는 시나리오가 발생할 수 있습니다. 그러나 하위 컬렉션이 포함된 상위 문서를 삭제하면 문제가 발생합니다. 이 문서에서는 이러한 상황을 효과적으로 관리하는 방법을 설명합니다.
데이터베이스 구조 및 삭제 문제
각 문서가 목록을 나타내는 "목록"이라는 컬렉션이 있는 시나리오를 생각해 보세요. 고유 ID로. 각 목록 문서에는 "직원" 및 "위치"라는 하위 컬렉션이 있습니다. 구조는 다음과 같습니다.
(lists) -listId (employees) (locations)
사용자가 특정 목록을 삭제하려는 경우 "listId" 문서를 삭제하면 Firestore의 문서를 무시하고 해당 하위 컬렉션이 유지됩니다.
해결책 : 순차 삭제
이 문제를 해결하기 위해 순차 삭제 접근 방식을 제안합니다.
이 방법을 사용하면 특정 목록 및 관련 하위 컬렉션이 완전히 제거됩니다.
고려 사항
삭제는 효과적인 도구이지만, 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!