firebase 无法在Cloud Firestore集合中添加多个文档

1zmg4dgp  于 2022-12-14  发布在  其他
关注(0)|答案(3)|浏览(142)

我正在尝试用flutter保存云firestore中的记录。问题是它只添加一个元素,并不断更新它的值每当我通过应用程序添加一个新的元素。
下面是我的代码:

Future addInterventionToDB(String userId, String etat, String op, String iv) {
    return FirebaseFirestore.instance
        .collection("interventions")
        .doc(userId)
        .set({
      'etat': etat,
      'operateur': op,
      'intervention': iv,
      'userId': user!.uid
    });
  }

下面是UI部分使用的函数!

String etatLabel = "";
  String operateur = "";
  String intervention = "";

  addIntervention(String etatt, String op, String iv) async {
    String currentUser = FirebaseAuth.instance.currentUser!.uid;
    if (currentUser != null) {
      DatabaseMethods().addInterventionToDB(currentUser, etatt, op, iv);
    }
  }

这里是我调用方法的按钮:

onPressed: () async {
                    await addIntervention(etatLabel, operateur, intervention);                   
                  },

注意到值是从芯片中提取的(每个芯片的选定值)。我不知道这里出了什么问题,尝试在每次新的选择发生时更新变量的状态,但仍然有同样的问题。

4c8rllxm

4c8rllxm1#

由于您传递了userId作为文档ID,因此它会不断覆盖它。
替换

return FirebaseFirestore.instance
        .collection("interventions")
        .doc(userId)
        .set({
      'etat': etat,
      'operateur': op,
      'intervention': iv,
      'userId': user!.uid
    });

return FirebaseFirestore.instance
        .collection("interventions")
        .add({
      'etat': etat,
      'operateur': op,
      'intervention': iv,
      'userId': user!.uid
    });

但在本例中,它添加了随机的文档id,因此不能使用userId进行提取,但已经使用'userId': user!.uid行将userId作为字段添加到文档中,因此可以使用'userId': user!.uid进行提取。
希望有帮助!快乐编码:)

dba5bblo

dba5bblo2#

代码是正确的,但是由于您可能使用了相同的UID,数据在集合中被覆盖了。请参阅此site以了解更多关于使用firestore的信息。希望这对您有所帮助。编码愉快:)

xienkqul

xienkqul3#

发生这种情况是因为您正在设置.doc(userId).set({})数据(阅读更多here)。您需要做的是让firebase为每个添加的文档自动生成唯一的uid。

Future addInterventionToDB(String userId, String etat, String op, String iv) {
    return FirebaseFirestore.instance
        .collection("interventions")
        .doc()
        .set({
      'etat': etat,
      'operateur': op,
      'intervention': iv,
      'userId': user!.uid
    });
  }

要读取特定userId的数据,

final query = FirebaseFirestore.instance
            .collection("interventions").where("userId", isEqualTo:user!.uid).get();

相关问题