我正在与google的Firestore数据库一起编写云功能。
我正在尝试编写递归删除更多数据。我找不到访问和删除数据库其他部分中的数据的语法。 我已经在下面的代码。
exports.deleteProject = functions.firestore.document('{userID}/projects/easy/{projectID}').onDelete(event => {
// Get an object representing the document prior to deletion
// e.g. {'name': 'Marie', 'age': 66}
// console.log(event)
// console.log(event.data)
console.log(event.data.previous.data())
var deletedValue = event.data.previous.data();
});
我在这里找到了一些信息,但我没有时间检查它,如果我发现有用的东西,我会修改这个问题。
https://firebase.google.com/docs/firestore/manage-data/delete-data?authuser=0
答案 0 :(得分:1)
可以使用以下代码递归删除集合中的所有文档。
这段代码对我来说很完美。
确保已安装Firebase 凭据和 firebase-admin 的 JSON 文件。
const admin = require('firebase-admin');
const db = admin.firestore();
const serviceAccount = require('./PATH_TO_FIREBASE_CREDENTIALS.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
deleteCollection(db, COLLECTION_NAME, NUMBER_OF_RECORDS)
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);
});
}
答案 1 :(得分:-3)
答案是你必须编写一个云功能,它自己删除数据并由客户端触发。客户端没有一种有效的方法。我使用的方法是在云函数中监听第一次删除,然后触发递归。
要在节点js中删除的代码:
db.collection("cities").document("DC").delete(