Javascript 条件数据库记录删除firebase

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>)

我想清理firestore数据库的一些记录。我有一个函数接收我想要保留的记录,如果id不在
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。根据您正在做的事情,您可以将查询改为“获取所有早于此的文档”,然后删除对该查询的任何点击。您还可以使用一个命令自动删除它们。