【问题标题】:How to manage add and update data in Firebase如何在 Firebase 中管理添加和更新数据
【发布时间】:2020-09-06 15:30:09
【问题描述】:

我正在使用 Flutter。 我想首先添加数据。 如果email或者uid已经注册了,我想更新data01/02或者添加data01/02。

如何指定初始数据。

    _firestore.collection('members').add({
    'uid': loginUser.uid,
    'email': loginUser.email,
    'data01': {
        'name': name,
        'img_url': 'https://www.xxx.xxx/xxx.png',
        'data02': {
            'phone': phone,
        }
    }

请给我建议。

【问题讨论】:

  • 您的 firebase 'members' 集合的结构如何?此代码用于添加文档。在此之前,您需要调用 Firebase 以检查您的 uid/email 是否存在于您的数据库中。因此,您可以将您的查询包装在查找匹配项的查询中。另外,我建议您使用 userId 作为文档的名称,这样每个成员都有一个文档,并且可以在联合登录时正常工作。
  • 很难解释。 members 结构如您所见代码。我不明白,但你的意思是我应该在文档 ID 上放置相同的 uid 吗?我不应该使用默认文档 ID?
  • 我明白了。你是什​​么意思。 stackoverflow.com/questions/53583664/…
  • 是的。如果您能够修改集合的结构,那么进行的方式可能会更容易,因为用户将始终拥有一个 uid,您无需通过电子邮件查看,只需检查是否有带有 uid 的文档名称存在与否
  • 但是我不明白如何从文档 ID 获取快照。请帮帮我。

标签: firebase flutter google-cloud-firestore


【解决方案1】:

假设您将文档名称设置为您可以使用的 loginUser.uid:

String rawJson = '{
    "email": loginUser.email,
    "data01": {
        "name": name,
        "img_url": "https://www.xxx.xxx/xxx.png",
        "data02": {
            "phone": phone,
        }
    }';

Map<String, dynamic> updateData = jsonDecode(rawJson); // import 'dart:convert';


final userDocument = await Firestore.instance.document('members/$loginUser.uid');
final userDocumentGet = userDocument.get().then((value) {
      if (value == null || !value.exists) {
      //a document for the member can NOT be found
      Firestore.instance.document('members/$loginUser.uid').setData(updateData);

    } else {
      //a document for the member is found
     Firestore.instance.document('members/$loginUser.uid').updateData(updateData);

    }
});

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多