根据where条件删除Firestore文档。

9 浏览
0 Comments

根据where条件删除Firestore文档。

var jobskill_ref = db.collection('job_skills').where('job_id','==',post.job_id);
jobskill_ref.delete();

抛出错误

jobskill_ref.delete 不是一个函数

0
0 Comments

//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();

0
0 Comments

问题的原因:

该问题的原因是希望根据特定的条件删除Firestore文档。在给定的代码示例中,使用了批量写操作(batched writes)来实现该功能。

解决方法:

为了解决这个问题,可以使用批量写操作(batched writes)来删除满足特定条件的Firestore文档。在给定的代码示例中,通过创建一个批量写操作的实例,然后使用where条件来获取满足条件的文档集合,并将每个文档添加到批量写操作中进行删除。最后,通过调用commit方法来提交批量写操作。

另外需要注意的是,批量写操作最多可以包含500个操作,因此根据文档数量的多少可能需要额外的逻辑处理。

如果不想使用循环来实现该解决方案,可以考虑使用其他方法或技术来批量删除文档。

0
0 Comments

问题:如何根据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的答案解释了为什么用户需要做某些事情...你的答案只是提供了一个不同的代码方法,没有解释。

还要注意的是,返回函数,这样如果发生错误,它会在日志中标记出来。

0