【问题标题】:Firebase receive documentID when adding and updating documents to firebase with flutter使用颤振将文档添加和更新到 Firebase 时,Firebase 会收到 documentID
【发布时间】:2020-12-28 23:35:15
【问题描述】:

我正在向我的 firestore 组 1 添加一个新文档,并使用该组的新 documentID 来更新另外两个文档。之后,我想将第 1 组的 documentID 保存在一个变量中,以便将其传递给我的小部件。

如何在将新文档添加到组 1 时接收和保存 documentID 而不会导致额外的 Firestore 读取?我不明白为什么下面的代码除了

valueId = value.documentID 

谢谢

onPressed: () {
                firestore.collection('Gruppe').add({
                  'Group': messageTextController.text.trim(),
                  'Gruppenersteller': loggedInUser.uid,
                  'Gruppenmitglieder': FieldValue.arrayUnion([
                    loggedInUser.email,
                    widget.userEmail,
                  ]),
                  'Angelegt': FieldValue.serverTimestamp(),
                }).then((value) => {
                      firestore
                          .collection('Nutzer')
                          .document(loggedInUser.uid)
                          .updateData({
                        'Slates': FieldValue.arrayUnion([value.documentID])
                      }),
                      firestore
                          .collection('Nutzer')
                          .document(widget.userNutzerId)
                          .updateData({
                        'Slates': FieldValue.arrayUnion([value.documentID])
                      }),
                      valueId = value.documentID,
                    });
                print('valueID');
                print(valueId);

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    您可以在添加之前获取文档的随机 ID,如下所示:

    val docRef = firestore.collection('Gruppe').doc()
    val docId = docRef.documentID;
    

    然后您可以继续使用set() 创建文档:

    docRef.set(...)
    

    在您上面的代码中,我希望print(valueId)打印value.documentID 的分配值,因为add()then() 是异步的,并且会立即返回一个Future。事实上,任何返回 Future 的函数都会立即这样做。您提供给then() 的回调将在操作完成后的一段时间后调用。因此,实际上,您的代码试图在分配文档 ID 之前打印它。这就是为什么我建议您立即获取它而不是稍后再获取它。

    【讨论】:

    • 非常感谢您的帮助。但是在添加之前获取 documentID 是否意味着我需要支付额外的读/写费用?
    • 没有。客户端应用会在后端发生任何事情之前随机生成 ID。
    猜你喜欢
    • 2020-03-14
    • 2021-06-27
    • 2021-06-05
    • 2020-12-31
    • 1970-01-01
    • 2020-02-06
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多