Javascript 条件数据库记录删除firebase
我想清理firestore数据库的一些记录。我有一个函数接收我想要保留的记录,如果id不在Javascript 条件数据库记录删除firebase,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我想清理firestore数据库的一些记录。我有一个函数接收我想要保留的记录,如果id不在docsToKeep:firebasedocuments参数中,我会签入所有记录。 我对所有记录使用foreach,并使用用户过滤器查找匹配的id,如下面的工作代码段所示: async function checkForNotifClean(docsToKeep:firebase.firestore.QuerySnapshot<firebase.firestore.DocumentData>)
docsToKeep:firebase
documents参数中,我会签入所有记录。
我对所有记录使用foreach
,并使用用户过滤器查找匹配的id,如下面的工作代码段所示:
async function checkForNotifClean(docsToKeep:firebase.firestore.QuerySnapshot<firebase.firestore.DocumentData>) {
const db = firebase.firestore();
const notifCollection = db.collection('notifications')
const allData = await notifCollection.get();
allData.docs.forEach(doc => {
const filtered = docsToKeep.docs.filter(entry => entry.id === doc.id);
const needsErase = filtered.length === 0;
if (needsErase) {
const id = doc.id;
notifCollection.doc(id).delete();
}
})
}
异步函数checkForNotifClean(docsToKeep:firebase.firestore.QuerySnapshot){
const db=firebase.firestore();
const notifCollection=db.collection('通知')
const allData=wait notifCollection.get();
allData.docs.forEach(doc=>{
const filtered=docsToKeep.docs.filter(entry=>entry.id==doc.id);
const needsErase=filtered.length==0;
如有需要(请参阅){
const id=doc.id;
notifCollection.doc(id).delete();
}
})
}
是否有更干净的方法来擦除所有不在docsToKeep
中的文档?将是一种函数,它获取不在两个数组中的所有对象并删除它们。我很乐意在javascript方面进行改进,过滤掉要删除的记录;在firebase方面,改进了一次删除某些记录集的机会,而不是遍历所有记录并删除每个记录。要删除(或写入)Firestore中的文档,您需要知道该文档的完整路径,包括其文档ID。如果您没有要删除的文档ID,那么您唯一的选择就是像现在这样确定这些ID
但是,这确实导致了一个问题,
docsToKeep
是如何填充的。我猜用户已经从完整列表中选择了一些文档。如果是这样的话,您是否可以通过倒排的列表:docsToDelete
?谢谢您的回答。问题是我在应用程序中只使用了一些通知记录,比如de last 6通知。所以我会处理最近的6条通知,其余的可以删除。从这个出发点开始,我问是否有更直接的方法从两组记录中获取要删除的记录集(set1:所有记录,set2:要保留的记录)在firebase端立即删除这些。根据您的回答,在firebase端删除一组记录时,您需要循环所有ID并在循环中删除这些ID,对吗?是的。要删除Firestore中的文档,您需要知道该文档的完整路径,包括其文档ID。如果您没有要删除的文档ID,那么您唯一的选择就是现在就确定这些ID。根据您正在做的事情,您可以将查询改为“获取所有早于此的文档”,然后删除对该查询的任何点击。您还可以使用一个命令自动删除它们。