Firestore中的查询删除功能正在删除所有内容,如何解决?

时间:2019-01-29 12:02:18

标签: javascript google-cloud-firestore angularfire2

我需要从集合中删除所有文档,但是我应该只删除“ pedido”等于“ this.pProdutos”的地方。问题在于,即使在查询后,它也会删除整个集合中的所有文档。 我现在正在下面使用此代码:

    this.db.collection('produtosPedidos', ref => ref.where('pedido', '==', this.pProdutos)).ref
    .get()
    .then(querySnapshot => {
      querySnapshot.forEach((doc) => {
        doc.ref.delete().then(() => {
          console.log("Document successfully deleted!");
        }).catch(function(error) {
          console.error("Error removing document: ", error);
        });
      });
    })
    .catch(function(error) {
      console.log("Error getting documents: ", error);
    });

2 个答案:

答案 0 :(得分:1)

问题是由查询末尾的.ref引起的:

ref.where('pedido', '==', this.pProdutos)).ref

第一部分ref.where('pedido', '==', this.pProdutos))构造了一个查询,但是在该查询上调用ref将向整个集合返回CollectionReference。删除结尾的.ref,它应该可以工作。

this.db.collection('produtosPedidos', ref => ref.where('pedido', '==', this.pProdutos))
    .get()
    .then(querySnapshot => {
        ...

对于这种类型的操作,通过AngularFire运行它没有任何其他好处。我建议只在裸露的JavaScript SDK上运行它,以减少代码量。由于AngularFire是基于JavaScript SDK构建的,因此当您执行此操作时,两者可以完美地互操作。

在代码中:

firebase.firestore().collection('produtosPedidos').where('pedido', '==', this.pProdutos)
    .get()
    .then(querySnapshot => {

答案 1 :(得分:0)

  deleteOffice(office) {
    this.firestore
      .collection('offices', (ref) => ref.where('name', '==', office.name))
      .get()
      .subscribe((querySnapshot) => {
        querySnapshot.forEach((doc) => {
          doc.ref
            .delete()
            .then(() => {
              console.log('Document successfully deleted!');
            })
            .catch(function (error) {
              console.error('Error removing document: ', error);
            });
        });
      });