当前位置: 首页 > 知识库问答 >
问题:

循环以将文档添加到Google FiRecovery

东博瀚
2023-03-14

我正在尝试循环浏览一个列表,将每个项目添加到google firestore文档中。然而,我面临的问题是,只有列表中的最后一项被添加到文档中。

注意:行打印(“=====$i POST成功添加==”)按预期增量打印5次

问题:如何使此循环将所有项目添加到firestore文档?

  void addPost() {
    DocumentReference documentReferencer = _firestore.collection('posts').doc();
    var i = 0;
    while (i < 5) {
      documentReferencer.set(postsData[i]);
      print("=== $i POST SUCCESSFULLY ADDED ===="); //PRINTS 5 TIMES
      i++;
    }
  }

共有2个答案

何骞尧
2023-03-14

事实上,所有项目都写入文档,但您不断覆盖文档,下一个项目最终只有最后一个项目。

调用set()时,您应该使用SetOptions合并设置为true就像这样。

  void addPost() {
    DocumentReference documentReferencer = _firestore.collection('posts').doc();
    var i = 0;
    while (i < 5) {
      documentReferencer.set(postsData[i], SetOptions(merge: true));
      print("=== $i POST SUCCESSFULLY ADDED ===="); //PRINTS 5 TIMES
      i++;
    }
  }

或者使用更新()。注意:如果文档尚不存在,则此操作将失败。

  void addPost() {
    DocumentReference documentReferencer = _firestore.collection('posts').doc();
    var i = 0;
    while (i < 5) {
      documentReferencer.update(postsData[i]);
      print("=== $i POST SUCCESSFULLY ADDED ===="); //PRINTS 5 TIMES
      i++;
    }
  }

我建议您在关注数据库的同时,逐步调试代码。然后您可以看到您是如何不断覆盖文档的。

还要注意,如果数据库调用出错,您不会捕获任何错误。因此您无法判断操作是否成功。在您的print()中,您唯一知道的是请求已发送到Firebase。

进一步阅读:

  • Firebase留档:将数据添加到Cloud FiRecovery
  • Flutter Firebase留档:用法-写入数据
  • 堆栈溢出:设置{合并: true}和更新之间的区别
百里京
2023-03-14

我不知道您的问题出在这里,但您的代码似乎忽略了一个事实,即将数据发布到服务器是一种异步操作。

换句话说,我希望您需要等待这种情况发生。

此外,我还要重构循环以提高可读性。

您的代码应该是这样的:

Future<void> addPost() async {
    DocumentReference documentReferencer = _firestore.collection('posts').doc();
    for(final post in postsData) {
      await documentReferencer.set(post);
      print("=== $i POST SUCCESSFULLY ADDED ===="); //PRINTS 5 TIMES
    }
  }
 类似资料:
  • 问题内容: 在我当前的项目中,我尝试将一个添加到PDFBox文档中。更具体地说,我使用来自的图片。我的代码如下所示: 文档被创建;我可以添加文本,但是出现错误,指出图像没有足够的信息可显示。 任何有关我做错事情的线索? 问题答案: 感谢您帮助我解决垃圾问题。昨晚和今天花了几个小时,人们对PipedIn / OutStreams感到困惑。无法解决。但是,我得到它的工作。事实证明,这并不是很困难。 我

  • 我正在使用Python FastAPI编写一些Rest API。需要在Swagger-OpenAPI文档中添加许多自定义部分。这包括每个API的联系信息字段、作者信息、显示数据模型的图像、数据库字段等。 有没有办法使用快速API内置的OpenAPI功能来完成所有这些工作?我知道可以托管我们自己的自定义 json 文件。但是我不知道如何将图像添加到招摇的json文件中。我也不知道如何将自定义字段添加

  • 我有一个JPanel、窗口和一组JPanel和JLabel。我想在JFrame中添加5个JPanel,在每个JPanel中添加一个JLabel。每个JPanel将用于表示有关骰子的数据。 但是,当我运行代码时,只有最后一个JPanel出现在JFrame上,并带有文本“Dice 4”。我不明白为什么。 守则:

  • 问题内容: 我已经从http://www.oracle.com/technetwork/java/javase/downloads/index.html#docs下载了Java API文档,并且应该使用 窗口->首选项-> Java->已安装的JRE->编辑->“选择rt.jar”-> Javadoc位置 并且该位置已被接受,“验证”就可以了。但是,对我来说,当我将鼠标悬停在某个项目上时(例如在A

  • 问题内容: 我在这里想到了这个循环: 它有效,但是我敢肯定有更好的方法 问题答案: 答案将取决于您使用的是哪种类型,例如,如果您使用的是a ,则可以使用类似… 假设您只想向表模型的末尾添加行;) 就个人而言,我希望将每个成员作为单个实体添加到表模型中,但这仅仅是我一个 看看如何使用表格了解更多详细信息…