根据where条件删除Firestore文档。
//The following code will delete documents from firestore using batch const batch = this.firestore.batch(); const querySnapshot = await this.noteRef.where('userId', '==', userId).get(); querySnapshot.forEach((doc) => { batch.delete(doc.ref); console.log(`deleted: ${doc.id}`); }); await batch.commit();
问题的原因:
该问题的原因是希望根据特定的条件删除Firestore文档。在给定的代码示例中,使用了批量写操作(batched writes)来实现该功能。
解决方法:
为了解决这个问题,可以使用批量写操作(batched writes)来删除满足特定条件的Firestore文档。在给定的代码示例中,通过创建一个批量写操作的实例,然后使用where条件来获取满足条件的文档集合,并将每个文档添加到批量写操作中进行删除。最后,通过调用commit方法来提交批量写操作。
另外需要注意的是,批量写操作最多可以包含500个操作,因此根据文档数量的多少可能需要额外的逻辑处理。
如果不想使用循环来实现该解决方案,可以考虑使用其他方法或技术来批量删除文档。
问题:如何根据where条件删除Firestore文档?
原因:要删除文档,首先需要获取到DocumentReference。为了做到这一点,必须先执行查询,然后循环遍历QuerySnapshot,最后根据ref删除每个DocumentSnapshot。
解决方法:
var jobskill_query = db.collection('job_skills').where('job_id','==',post.job_id); jobskill_query.get().then(function(querySnapshot) { querySnapshot.forEach(function(doc) { doc.ref.delete(); }); });
感谢指点。不确定选项有哪些...也许这是NodeJS?在我的情况下,我必须使用get()来进行调用,然后使用.then(),像这样:.get().then(function (querySnapshot) {}
谢谢你发布了一个改进的答案。我的回答着重于首先执行查询,然后才能单独删除其结果。很高兴看到你找到了一种改进我的方法适用于你的情况的方法,并感谢你分享。
从我看来,Frank列出了删除一系列文档的关键要求,回答了OP的问题(例如,'delete where')...其他任何内容都可以由工程师根据自己的需求进行调整。很棒你添加了一个答案,可以帮助其他人在Firebase Functions中进行特定的使用...由于用户并没有明确调用Firebase Functions,所以你的回答可能会让人难以理解,尤其是因为它使用了一些独特的ES2017/TS功能。哦,还有一个提示,Frank是一位受人尊敬的Firebase工程师。
我可以说我尽力了!在你的分析中,你可以考虑一下这个答案与你的答案在投票数上的差异。明确一点,我并没有说你的代码仅适用于Firebase Functions,但你在这里和你的回答中特别强调了它。与之相比,Frank的答案指出了用户需要执行某些操作的关键要求,并给出了一个示例,用户可以根据自己的需求进行调整。懒惰的复制粘贴是一个问题...但Frank的答案解释了为什么用户需要做某些事情...你的答案只是提供了一个不同的代码方法,没有解释。
还要注意的是,返回函数,这样如果发生错误,它会在日志中标记出来。