所以我想用adminSDK删除一个集合中的所有文档,下面的代码取自这里的官方文档
async function deleteCollection(db, collectionPath, batchSize) {
const collectionRef = db.collection(collectionPath);
const query = collectionRef.orderBy('__name__').limit(batchSize);
return new Promise((resolve, reject) => {
deleteQueryBatch(db, query, resolve).catch(reject);
});
}
async function deleteQueryBatch(db, query, resolve) {
const snapshot = await query.get();
const batchSize = snapshot.size;
if (batchSize === 0) {
// When there are no documents left, we are done
resolve();
return;
}
// Delete documents in a batch
const batch = db.batch();
snapshot.docs.forEach((doc) => {
batch.delete(doc.ref);
});
await batch.commit();
// Recurse on the next process tick, to avoid
// exploding the stack.
process.nextTick(() => {
deleteQueryBatch(db, query, resolve);
});
}
如您所见,我需要提供一个batchSize,它是一个数字,那么我应该提供多大的大小呢?例如,我在一个集合中有100.000个文档。
因为从文档来看,Firestore也有一个限制
每个数据库每秒的最大写入次数:10,000(每秒最多10 MiB)
那么如何确定批量大小呢?
1条答案
按热度按时间vlju58qv1#
batchSize
变量用于通过limit()
方法定义Query
。这个Query
被传递给deleteQueryBatch()
方法,在该方法中执行该Query
,并且根据查询结果,使用一些删除操作填充批处理写入。由于批处理写入最多可包含500个操作,因此您可以分配给
batchSize
为500。PS:我知道我没有完全回答你的问题,这更多的是关于推荐批量大小的问题,但是,由于500是批量大小的记录限制,你应该不会遇到这个限制的任何问题,除非你删除了按字典顺序关闭的文档,如文档中所述。