【问题标题】:Update Firestore document where user_id is same as currentUser uid更新 user_id 与 currentUser uid 相同的 Firestore 文档
【发布时间】:2021-01-21 02:56:16
【问题描述】:

我有用于创建或更新客户的功能。

我能够成功写入数据库。我创建了一个名为 user_id 的字段,我将 currentUser uid 保存到其中,因此我只能读取已登录的用户文档。

但是,我无法更新文档,因为我知道我可能没有以正确的方式引用文档。

我收到以下错误:

颤振:错误:PlatformException(错误5,FIRFirestoreErrorDomain,否 要更新的文档:

我做错了什么?

下面是我的函数:

  Future createOrUpdateCustomer(Customer customer, bool isUpdating) async {
    FirebaseUser user = await FirebaseAuth.instance.currentUser();
    String userId = user.uid;
    print('Current logged in user uid is: $userId');

    CollectionReference customerRef =
        await Firestore.instance.collection('customers');

    if (isUpdating) {
      customer.updatedAt = Timestamp.now();    
      customer.userId = userId;    
      await customerRef.document().updateData(customer.toMap());
      print('updated customer with id: ${customer.id}');
      print('updated customer with logged in uid: ${customer.userId}');
    } else {
      customer.createdAt = Timestamp.now();

      DocumentReference documentReference = customerRef.document();

      customer.id = documentReference.documentID;
      customer.userId = userId;

      print('created customer successfully with id: ${customer.id}');

      await documentReference.setData(customer.toMap(), merge: true);
      addCustomer(customer);
    }
    notifyListeners();
  }

【问题讨论】:

    标签: firebase flutter google-cloud-firestore firebase-authentication flutter-dependencies


    【解决方案1】:

    您正在尝试更新一个不存在的文档。在这一行中,

    await customerRef.document().updateData(customer.toMap())
    

    您正在使用随机生成的 id 创建文档引用。您应该明确设置要更新的文档的id

    【讨论】:

    • 哦,快!我怎么错过了。感谢您指出了这一点!愚蠢的疏忽。 :)
    【解决方案2】:

    我认为您可以使用条件更新文档,但参考必须是您在 firestore 界面第二部分看到的 doc id,

    【讨论】:

    • 感谢 Atiq!你和日文指出了我的一个明显愚蠢的遗漏。欣赏!
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2021-01-18
    • 2020-06-10
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多