Flutter - 在 Firestore 中删除文档会导致删除随机文档而不是所选文档

时间:2021-03-30 10:03:49

标签: firebase flutter google-cloud-firestore data-modeling

“utenti”(用户)集合包含每个用户的文档,该文档又包含“salvataggi”(保存)集合以保存应用内的对象。

“salvataggi”(保存)中的每个文档都有一个自动生成的 id,其中包含一系列数据(准确地说是字符串)。

“salvataggi”(保存)中的文档可以通过始终在 FIrestore 中保存从其他两个集合创建的对象来添加。

当我想通过一个按钮从 'salvataggi'(保存)集合中删除一个对象时,会随机删除一个文档,而不是与该对象对应的文档。

Screenshot of Firestore

对象 1

final CollectionReference _usersRef =
          FirebaseFirestore.instance.collection('utenti');

      final User _user = FirebaseAuth.instance.currentUser;

      //Add
      Future _addToSaved() { 
        return _usersRef.doc(_user.uid).collection('salvataggi').doc().set({
          'fonte': elenco.fonte,
          'title': elenco.title,
          'url': elenco.urlAvv,
          'imageEv': elenco.urlAvv,
          'p1': elenco.iconaProspettiva1,
          'p1url': elenco.urlProspettiva1,
        });
      }
       
      //Remove
      Future _removeFromSaved() async { 
        CollectionReference userSaved =
            _usersRef.doc(_user.uid).collection('salvataggi');

        QuerySnapshot querySnap = await userSaved.get();

        querySnap.docs[0].reference.delete();
      }

对象 2

final CollectionReference _usersRef =
      FirebaseFirestore.instance.collection('utenti');

  final User _user = FirebaseAuth.instance.currentUser;

  //Add
  Future _addToSaved() {
    return _usersRef.doc(_user.uid).collection('salvataggi').doc().set({
      'fonte': widget.single.fonte,
      'title': widget.single.title,
      'url': widget.single.urlAvv,
      'imageEv': widget.single.imageEvAvv,
      'lastupdate': widget.single.dataAggiornamento,
      'p1': widget.single.iconaProspettiva1,
      'p1url': widget.single.urlProspettiva1,
      
    });
  }
  
  //Remove
  Future _removeFromSaved() async {
    CollectionReference userSaved =
        _usersRef.doc(_user.uid).collection('salvataggi');

    QuerySnapshot querySnap = await userSaved.get();

    querySnap.docs[0].reference.delete();
  }

我做错了什么?为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

当用户保存文档时,请尝试用它保存该文档的 ID,以便在用户未保存该文档时。您可以将该未保存文档的 ID 传递给 firestore。

它看起来像这样

  Future _removeFromSaved(String docID) async {
    CollectionReference userSaved =
        _usersRef.doc(_user.uid).collection('salvataggi');

    await userSaved.doc(docID).delete()
  }

--更新--

您可以在将文档添加到 firestore 并更新之后调用 then 方法来保存文档 id

  Future _addToSaved()async {
    await _usersRef.doc(_user.uid).collection('salvataggi').add({
      'fonte': widget.single.fonte,
      'title': widget.single.title,
      'url': widget.single.urlAvv,
      'imageEv': widget.single.imageEvAvv,
      'lastupdate': widget.single.dataAggiornamento,
      'p1': widget.single.iconaProspettiva1,
      'p1url': widget.single.urlProspettiva1,
      
    }).then(docRef=>await _usersRef.doc(_user.uid).collection('salvataggi').doc(docRef.id).update({'id':docRef.id}));
  }

答案 1 :(得分:0)

  querySnap.documents.first.reference.delete();

用它代替 querySnap.docs[0].reference.delete();

相关问题