То, что я вижу в вашем коде, не называется транзакцией, оно называется партией. Поэтому, если вы хотите удалить все документы в коллекции с помощью Android SDK, я рекомендую использовать следующие методы:
private void deleteCollection(final CollectionReference collection, Executor executor) {
Tasks.call(executor, new Callable<Object>() {
@Override
public Object call() throws Exception {
int batchSize = 10;
Query query = db.collection("job_skills").whereEqualTo("job_id", job_id);
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;
}
});
}
А вот метод deleteQueryBatch()
:
@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();
}