洗掉 Firestore 集合時,什么被認為是最有效的?
使用批處理執行洗掉:
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);
});
}
或者使用firestore的默認recursiveDelete()方法:
await firestore.recursiveDelete(collectionRef);
注意:我要洗掉的集合沒有嵌套的子集合。另外,我在云函式中運行此代碼。
/messages (C)
-message_id_1 (D)
-message_id_2 (D)
-message_id_3 (D)
...
-message_id_10000 (D)
uj5u.com熱心網友回復:
該recursiveDelete函式使用與后臺批處理寫入相同的機制,因此任何性能差異都應該可以忽略不計。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/484123.html
標籤:javascript 火力基地 谷歌云火库
